【Jenkins+青藤云】基于Jenkins部署青藤云镜像扫描插件(1)

本文介绍了如何在Kubernetes环境中,通过Jenkinspipeline以Docker容器的方式运行青藤云的安全扫描,而非官方的直接在Jenkins主机上启动pod的方法。这种方法降低了耦合性,便于故障排查和维护。在pipeline中执行扫描步骤,包括定义扫描指令、处理扫描结果并将其保存和展示。此外,文章还提到了挂载容器目录以处理报告的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与青藤云官方提供的部署方法不一样,区别于官方在Jenkins主机上起一个扫描pod的方法,我们使用的是耦合性更小,更易排查问题的,
使用pipeline在k8s集群中起docker容器,在docker容器中起扫描pod的方法

听起来很麻烦,但是它的优点在于极少改变pipeline,并且便于排查故障。

效果图
在这里插入图片描述
准备:
k8s集群,Jenkins发版平台,将青藤云的扫描镜像拉取到自己的镜像仓库,Jenkins主机节点能访问青藤云平台的8244和8443端口
PS:之前没有理解这个服务端是什么,是部署好的青藤云平台服务端

在Jenkins的构建任务中执行镜像扫描

1.在pipeline中添加镜像扫描的步骤(pipeline是存储在gitlab)

    stage('Image scan') {
        steps {
          container(name: 'docker') {
            echo "这是执行镜像扫描的步骤"
            script{
                echo "定义变量res,将镜像扫描的结果(是否进行阻断)赋值给改变量,如果命中阻断规则,res为非0的值"
                echo "以下是扫描指令举例,用户需根据自己的需求进行修改"
                sh """ 
                  docker run -i --rm -v /root/report:/root -v /etc/machine-id:/etc/machine-id -v /tmp:/tmp -v /var/lib/docker:/var/lib/docker -v /var/run/docker.sock:/var/run/docker.sock --network=host 镜像仓库中镜像位置 scan --comid=xxx --server-host=xxx --htmlfile=/root/sec-report.html --jsonfile=/root/output.json  --log-level=debug ${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}
                  
                """
                
                sh "mkdir /home/jenkins/agent/workspace/${JOB_NAME}/report"
                sh "cp /root/report/sec-report.html /root/report/output.json /home/jenkins/agent/workspace/${JOB_NAME}/report"

                echo "该指令将扫描结果导出到artifacts中"
                archiveArtifacts artifacts: 'report/sec-report.html', followSymlinks: false
                sh "find / -name sec-report.html"
                
                echo "【可选指令】如果安装了html report插件,该指令将扫描结果上传到插件,可直接在插件中查看结果"
                publishHTML([allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true, reportDir: 'report/', reportFiles: 'sec-report.html', reportName: 'HTML Report', reportTitles: "${env.BUILD_NUMBER}"])
           
                }
            }
            }
        }

2.挂载容器中的容器的目录,因为是容器中起容器,将报告映射出来有点麻烦,先将容器A中的容器B映射到主机目录,再将主机目录挂到容器A

在容器A中挂载

    - hostPath:
        path: "/root/report"
      name: "volume-report"

制作挂载目录

        - mountPath: "/root/report"
          name: "volume-report"
          readOnly: false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值