墨菲安全文档文档
最佳实践
解决方案
常见问题
名词解释
数据保护
问题反馈
🌟star开源项目 (opens new window)
版本更新
最佳实践
解决方案
常见问题
名词解释
数据保护
问题反馈
🌟star开源项目 (opens new window)
版本更新
常见问题
  • 新手快速入门

  • 关于集成

    • GitHub
    • GitHub Actions
    • GitLab
    • GitLab CI
    • Gitee
    • Git指定项目检测
    • JFrog
    • Nexus
    • Harbor
    • Docker指定项目检测
    • Jenkins
    • CLI客户端
    • JetBrains IDE
    • 文件上传检测
    • Svn指定项目检测
    • 组件清单检测
    • 集成设置与管理
  • 关于代码托管

  • 关于项目管理

  • 关于安全问题

  • 关于检测问题

  • 关于漏洞知识库

  • 关于私有化部署

  • 关于系统异常

  1. 常见问题
  2. /
  3. 关于集成
  4. /
  5. Jenkins

¶ Jenkins

更新时间: 2023-07-26 16:42:35

¶ 一、功能简介

通过与 Jenkins 集成,墨菲安全能够在流水线构建过程中自动运行,使用其强大的 CLI 工具对指定项目进行实时检测。这一功能极大地提高了安全问题的发现速度,帮助开发团队及时检测出漏洞,确保软件产品在线上的安全性和稳定性。

¶ 二、安装 CLI(商业版)

¶ 2.1 在Jeknins构建节点上安装墨菲安全CLI

  • 点击 集成方式 -> Jenkins -> 下载CLI并上传到构建节点上 -> 添加执行权限

¶ 2.2 复制代码,后面需添加到jenkinsfile中

  • --server 和 --token 参数已默认填充,直接复制代码使用即可

¶ 三、安装 CLI(SaaS版)

¶ 3.1 在Jeknins构建节点上安装墨菲安全CLI

  • 点击 集成方式 -> CLI -> 构建节点安装 CLI -> 配置用户 token

¶ 四、配置 Jenkins

¶ 4.1 修改项目中的 Jenkinsfile

集成墨菲安全扫描步骤(这里以 murphysec-test 项目为例)

  • 点击 Dashboard -> murphysec-test -> Configure -> 修改 Script 添加墨菲安全扫描步骤 -> Apply -> Save

  • Jenkinsfile 添加墨菲安全扫描步骤示例:

(SaaS 版本无需指定 --server)
scan: 指定检测模式,您也可以选择其他检测模式,例如 binscan、dfscan
--server: 该参数填写私有化服务地址,例如 http://xxx.xxx.com (opens new window)
--token: 该参数填写个人 token,token 在墨菲安全服务后台获取

  • 检测模式说明

scan: 通过扫描项目中的各种文件类型来检测开源漏洞,全方位从项目中的源代码、二进制等文件中,获取最全面的开源组件信息和存在的漏洞
binscan: 通过扫描二进制文件检测开源漏洞,专门针对二进制文件进行检测,识别二进制文件中的开源组件和存在的漏洞
dfscan: 通过扫描包管理文件,分析项目源代码中的依赖配置文件,识别项目中使用的开源组件和存在的漏洞

stage("murphysec scan") { 

 steps{ 
  sh  '''
    murphysec scan . --server {Your service address} --token {Your token} --deep 
   ''' 
  } 
}
  • 完整 Jenkinsfile 示例 + 注释:
pipeline { // 定义一个流水线
    agent { label "ansible"} // 指定具有 "ansible" 标签的构建代理来执行这个流水线

    stages { // 定义流水线中的各个阶段

        stage("Pull code") { // 定义一个名为 "Pull code" 的阶段,用于拉取项目代码
            steps {
                script {
                    // 使用 Git 插件从指定仓库拉取代码,指定凭据和仓库 URL
                    git credentialsId: '18d41658-xxxx-xxxx-xxxx-d8455f4e240b', url: 'https://xxx.xxx.com/root/xxx.git'
                }
            }
        }

        stage("Build Project") { // 定义一个名为 "Build Project" 的阶段,用于构建项目
            steps {
                sh 'echo "Build Project"' // 在这里添加实际的构建命令
            }
        }

        stage("murphysec scan") { //定义一个名为 "murphysec scan" 的阶段,用于执行墨菲安全扫描

            steps {
                // 执行墨菲安全的扫描命令
                sh '''
                    murphysec scan . --server {Your service address} --token {Your token} --deep 
                '''
            }
        }

        stage("Test") { // 定义一个名为 "Test" 的阶段,用于测试项目
            steps {
                sh 'echo "Test"' // 在这里添加实际的测试命令
            }
        }

        stage("publish project") { // 定义一个名为 "publish project" 的阶段,用于发布项目
            steps {
                sh 'echo "publish project"' // 在这里添加实际的发布命令
            }
        }
    }

    post { // 定义构建完成后的操作
        success { // 构建成功时执行以下操作
            script {
                currentBuild.description = "\n 打包成功!"
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\\n结果:打包成功!已触发发布流程\\n时间:'$DATE'\\n节点:'$NODE_NAME'"
                '''
            }
        }

        failure { // 构建失败时执行以下操作
            script {
                currentBuild.description = "\n 打包失败!"
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\\n结果:打包失败!\\n时间:'$DATE'\\n节点:'$NODE_NAME'\\n原因:项目中存在强烈建议修复组件!"
                '''
            }
        }
    }
}

¶ 4.2 手动触发 Jenkins 流水线

  • 点击 Dashboard -> murphysec-test -> Build Now

¶ 4.3 在 Jenkins 流水线中查看检测结果

  • 点击 Dashboard -> murphysec-test -> 选择最近的一次 Build History -> Console Output

¶ 4.4 在墨菲安全后台查看项目检测结果

  • 点击 项目管理 -> 点击项目

¶ 五、常见问题

¶ 问:是否需要在每台 Jenkins 构建节点上安装墨菲安全 CLI ?

答:如果您在 Jenkinsfile 中指定了使用某台节点做构建操作,那么只需要在这台节点上安装墨菲安全 CLI 即可,如果有很多台构建节点,那么需要在其他构建节点上都安装墨菲安全 CLI。

¶ 问:是否支持 Jenkins 流水线的阻断,比如违反规则的时候,Pipline 就不让他构建,并给出失败提醒?

答:支持,可以通过使用 jq 命令解析 json 格式的结果,判断如果有强烈建议修复的组件,则终止流水线,同时也可以添加别的规则。

  • Jenkinsfile 添加墨菲安全扫描步骤并进行阻断示例:
        stage("murphysec scan") {

            steps{
                sh '''
                    NUM=`murphysec scan . --server {Your service address} --token {Your token} --json | jq . | jq ".comps | map(select(.show_level == 1)) | length"`
                    if [ $NUM -ne 0 ];then
                        false
                    fi
                '''
            }
        }
  • 完整 Jenkinsfile 示例 + 注释:
pipeline { // 定义一个流水线
    agent { label "ansible"} // 指定具有 "ansible" 标签的构建代理来执行这个流水线

    stages { // 定义流水线中的各个阶段

        stage("Pull code") { // 定义一个名为 "Pull code" 的阶段,用于拉取项目代码
            steps {
                script {
                    // 使用 Git 插件从指定仓库拉取代码,指定凭据和仓库 URL
                    git credentialsId: '18d41658-xxxx-xxxx-xxxx-d8455f4e240b', url: 'https://xxx.xxx.com/root/xxx.git'
                }
            }
        }

        stage("Build Project") { // 定义一个名为 "Build Project" 的阶段,用于构建项目
            steps {
                sh 'echo "Build Project"' // 在这里添加实际的构建命令
            }
        }

        stage("murphysec scan") { //定义一个名为 "murphysec scan" 的阶段,用于执行墨菲安全扫描

            steps {
                // 运行 murphysec scan 命令并获取扫描结果,然后使用 jq 命令对其进行处理,以筛选出 show_level 等于1的组件。脚本会计算这些组件的数量,并将结果存储在NUM变量中。如果NUM不等于0(即存在 show_level 等于1的组件),脚本将返回false,表示失败
                sh '''
                    NUM=`murphysec scan . --server {Your service address} --token {Your token}  --json | jq . | jq ".comps | map(select(.show_level == 1)) | length"`
                    if [ $NUM -ne 0 ];then
                        false
                    fi
                '''
            }
        }

        stage("Test") { // 定义一个名为 "Test" 的阶段,用于测试项目
            steps {
                sh 'echo "Test"' // 在这里添加实际的测试命令
            }
        }

        stage("publish project") { // 定义一个名为 "publish project" 的阶段,用于发布项目
            steps {
                sh 'echo "publish project"' // 在这里添加实际的发布命令
            }
        }
    }

    post { // 定义构建完成后的操作
        success { // 构建成功时执行以下操作
            script {
                currentBuild.description = "\n 打包成功!"
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\\n结果:打包成功!已触发发布流程\\n时间:'$DATE'\\n节点:'$NODE_NAME'"
                '''
            }
        }

        failure { // 构建失败时执行以下操作
            script {
                currentBuild.description = "\n 打包失败!"
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\\n结果:打包失败!\\n时间:'$DATE'\\n节点:'$NODE_NAME'\\n原因:项目中存在强烈建议修复组件!"
                '''
            }
        }
    }
}
上一篇: Docker指定项目检测 下一篇: CLI客户端
  • 一、功能简介
  • 二、安装 CLI(商业版)
  • 三、安装 CLI(SaaS版)
  • 四、配置 Jenkins
  • 五、常见问题

关于我们

微信公众号
技术博客 (opens new window)
B站视频 (opens new window)
GitHub (opens new window)

公司

support@murphysec.com
北京市海淀区百旺弘祥文化科技创意园5118室

京ICP备 2022005866号-1

beian京公网安备 11010802040001号

© 墨菲未来科技(北京)有限公司