如何在GitLab流水线作业中使其失败

42次阅读
没有评论

问题描述

在使用GitLab流水线时,有一个需求是希望在检测到漏洞时使流水线作业失败。他目前正在使用依赖检查工具来扫描应用程序,但不确定如何配置使流水线作业在发现漏洞时失败。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你只需要配置mvn依赖插件,在发现漏洞时使其失败即可。
你可以通过设置failBuildOnCVSS配置标志来实现。例如,以下是从文档中的严重程度为8的示例:

<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
              <groupId>org.owasp</groupId>
              <artifactId>dependency-check-maven</artifactId>
              <version>6.2.2</version>
              <configuration>
                  <failBuildOnCVSS>8</failBuildOnCVSS>
              </configuration>
              <executions>
                  <execution>
                      <goals>
                          <goal>check</goal>
                      </goals>
                  </execution>
              </executions>
            </plugin>
            ...
        </plugins>
        ...
    </build>
    ...
</project>

通过这样的配置,如果发现严重程度为8或更高的漏洞,mvn作业将失败,从而导致流水线作业失败。

方案2

如果mvn依赖检查插件没有提供直接的配置选项来使作业失败,你可以在流水线脚本中手动检查漏洞并退出作业。
以下是一个示例流水线脚本,可以在发现漏洞时使作业失败:

dependency_scanning:
  stage: security_scan
  script:
    - mvn dependency-check:aggregate -B "-DdbUser=$NVD_DB_USER" "-DdbPassword=$NVD_DB_PASSWORD" "-DconnectionString=$NVD_DB_CONSTRING"
    # 检查漏洞并退出作业
    - |
      if grep -q "One or more dependencies were identified with known vulnerabilities" ./target/dependency-check-report.html; then
        echo "Vulnerabilities found. Failing the job."
        exit 1
      fi
  artifacts:
    paths:
      - ./target/dependency-check-report.html
  only:
    - master

在这个示例中,我们首先使用mvn dependency-check:aggregate命令运行依赖检查。然后,我们使用grep命令在生成的报告文件中查找是否存在漏洞。如果找到漏洞,我们使用exit 1命令退出作业,并将作业标记为失败。

请注意,这只是一个示例脚本,你可能需要根据你的具体情况进行调整。确保在脚本中使用正确的命令和文件路径来检查漏洞并退出作业。

以上是两种在GitLab流水线作业中使其失败的方法。你可以根据你的需求选择适合你的方法。

正文完