功能概述
容器安全服务 CI/CD 接入功能可以将镜像安全扫描集成到您的 CI/CD 流程中,该功能可在项目构建阶段对生成的镜像进行深度安全检测,识别潜在风险并给出可操作的修复建议,从而实现安全漏洞的早期发现与修复,有效降低软件供应链安全风险。
技术原理
CI/CD 镜像扫描无需将镜像资产同步到容器安全服务,仅需要将 CI/CD 镜像扫描插件集成到 Jenkins 或 GitHub 的项目构建任务中。当您在 Jenkins 工具或 GitHub 中构建项目时,会同时触发镜像安全扫描任务,扫描指定镜像中是否存在安全风险。扫描结果统一在仓库镜像页面中展示,便于查看和处理镜像中存在的安全风险。
适用场景
本功能适用于以下常见的 CI/CD 环境:
使用限制
CI/CD 镜像安全扫描每个镜像消耗一次扫描次数,重复扫描将重复消耗,需确保扫描次数充足。
配置要求
为保障扫描性能,请确保您的 CI/CD 扫描服务器满足以下最低配置要求:
配置项 | 最低配置 | 推荐配置 |
CPU | 1核 | 4核 |
内存 | 2 GB | 8 GB |
硬盘 | 60 GB | 100 GB |
网络 | 可访问公网,能够连通腾讯云公开 CCR。 | 可访问公网,上行带宽 ≥ 10 Mbps,能够稳定连通腾讯云服务端点。 |
操作步骤
获取接入 Token
1. 登录 容器安全控制台,进入策略管理 > CI/CD接入。
2. 在 CI/CD 接入页面,单击生成接入Token。

3. 输入 CI/CD 名称,选择扫描结果存储时长,单击创建Token,系统会生成一个 64 位字符的 Token 到 CI/CD 接入列表中,后续可复制该 Token 配置到 Jenkins 或 GitHub 中。

集成插件
在 Jenkins 或 GitHub 中集成腾讯云 CI/CD 镜像扫描插件。
Jenkins 版本要求
Jenkins 版本要求:1.625.3及以上版本。
下载插件
1. 登录容器安全控制台,进入 策略管理 > CI/CD接入。
2. 在 CI/CD 接入页面,单击右上角显示功能使用说明,单击下载 Jenkins 插件,容器安全服务的 CI/CD 镜像扫描插件会以 hpi 格式下载到本地,插件名称为cicd-scanner.hpi。
部署插件
1. 登录 Jenkins 工具,进入管理 Jenkins > 系统配置 > 插件。

2. 在插件页面,单击高级设置,在部署插件区域,单击选择文件,上传已下载到本地的 Jenkins 插件,单击部署。

3. 安装完成后,可在已安装插件标签页中确认插件是否成功安装。
4. 插件安装完成后,需要重启 Jenkins 服务才能生效。
5. 登录 Jenkins 工具,定位到要配置镜像安全扫描的项目,单击 Jenkins-Freestyle 模式的项目名称。
6. 在左侧导航栏,单击配置,在 Build Steps 区域,单击增加构建步骤,下拉菜单选中 CI/CD Scanner(Tencent)。在 CI/CD Scanner(Tencent) 区域配置接入 Token 和期望扫描的镜像 ID,具体参数配置请参见 配置参数,单击保存,完成 CI/CD 插件与 Jenkins 模式的集成。

1. 登录 Jenkins 工具。
2. 定位到要配置镜像安全扫描的项目,单击 Jenkins-Pipeline 模式的项目名称。
3. 在左侧导航栏,单击配置。
4. 在流水线区域,完成和 Jenkins-Freestyle 模式一样的配置,具体参数配置请参见 配置参数,以下为您提供了 Jenkinsfile 的声明式和脚本化的流水线语法样例作为参考,您可以选择一种语法样例完成配置。
脚本式 Pipeline 样例
node {stage('Run docker') {// 单行 docker 命令sh 'docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --network=host ccr.ccs.tencentyun.com/yunjing_agent/cicdscanner:latest --token=$token --imageId=$imageId'}}
声明式 Pipeline 样例
pipeline {agent anyenvironment {IMAGE_ID = '$IMAGE'TOKEN = '$TOKEN'REGISTRY_URL = nullREGISTRY_USERNAME = nullREGISTRY_PWD = null}stages {stage('Run docker') {steps {sh 'docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --network=host ccr.ccs.tencentyun.com/yunjing_agent/cicdscanner:latest --token=env.TOKEN --imageId=env.IMAGE_ID'}}}}
非 Jenkins 流水线工具均可参考 GitHub Actions 模式接入指引,此处以 GitHub Actions 模式为例。
1. 登录 GitHub,单击右上角头像,在下拉菜单中选中 Repositories。
2. 在 Repositories 页签下,单击您要集成 CI/CD 插件的 repository 。
3. 单击 Actions 页签,在 All workflows 列表中,定位到要集成 CI/CD 插件的 workflows 流水线文件,单击其 Actor 列的···,在下拉菜单中,选择 View workflow file。
4. 在 Workflow file for this run 中按照以下样例中 Scan image by cicd-scanner 步骤进行镜像扫描配置,将 ${{ secrets.CICD_TOKEN }} 替换成生成的 token,${{ env.REPO_TAG }} 替换为期望扫描的镜像,具体参数配置请参见 配置参数。
name: Docker build and scan security issue by cicd-scanneron:push:branches: [main]pull_request:branches: [main]env:REPO_TAG: "your_docker_image_repo:your_docker_image_tag"jobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Build the Docker imagerun: docker build . --file Dockerfile --tag ${{ env.REPO_TAG }}- name: Scan image by cicd-scannerrun: |docker run --rm \\-v /var/run/docker.sock:/var/run/docker.sock \\--network=host \\ccr.ccs.tencentyun.com/yunjing_agent/cicdscanner:latest \\--token=${{ secrets.CICD_TOKEN }} \\--imageId=${{ env.REPO_TAG }}
配置参数
在 Jenkins 或 GitHub 中配置扫描参数,请参考下表:
参数 | 必/选填 | 说明 | 本地镜像示例 | 仓库镜像示例 |
Token | *必填 | 容器安全服务 CI/CD镜像扫描插件的接入Token。 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
imageId | *必填 | 输入需要扫描的镜像 ID 或imageName:imageTag,如果是仓库镜像,也可填写完整的 URL。 | 7cc39f89fa58 或 ubuntu:21.04 | xxxx.tencentcloudcr.com/tcss/mybuild:v1 或 mybuild:v1 |
registryUrl | 选填 | 镜像仓的 URL。 | / | xxxx.tencentcloudcr.com/tcss |
registryUsername | 选填 | 镜像仓登录用户名。 | / | admin |
registryPwd | 选填 | 镜像仓登录密码。 | / | password |
说明:
当扫描远程仓库镜像时,registryUrl、registryUsername、registryPwd 参数必填。
执行扫描
集成配置完成后,您在构建项目时,会同步执行镜像安全扫描任务,扫描您项目的镜像是否存在安全风险。
查看结果
1. 登录容器安全控制台,进入策略管理 > CI/CD接入。
2. 在 CI/CD 接入列表中,针对您关注的 Token,单击查看镜像风险,即可跳转到仓库镜像页面查看指定Token的镜像扫描结果。


3. 在仓库镜像页面中,可取消实例名称(此处指CI/CD名称)的搜索过滤,查看所有 CI/CD 的镜像扫描结果。
4. 定位到存在安全风险的镜像,单击详情,进入镜像详情页面,查看该镜像中存在的安全漏洞、木马病毒、风险信息。