本文档旨在解决在使用 gitHub Actions 运行 Qodana 代码质量检查时,如何正确传递环境变量,特别是当项目依赖于私有 maven 仓库并需要身份验证凭据时。通过修改 github Actions workflow 文件中的 args 参数,确保环境变量正确传递给 Qodana 扫描器,从而避免构建失败的问题。
使用 GitHub Actions 运行 Qodana 并传递环境变量
在使用 GitHub Actions 运行 JetBrains 的 Qodana 代码质量检查工具时,有时需要传递环境变量,例如访问私有 Maven 仓库所需的用户名和密码。本教程将介绍如何正确地将这些环境变量传递给 Qodana,以避免构建失败。
问题描述
在 GitHub Actions workflow 文件中使用 JetBrains/qodana-action 时,尝试通过 args 参数传递环境变量,但构建失败,提示缺少 gradle 属性,即使这些属性已作为环境变量传递。
问题在于 args 参数的格式。args 参数中的环境变量之间需要使用逗号 , 分隔,而不是空格。
正确配置示例
以下是正确的 GitHub Actions workflow 文件配置示例:
name: Qodana on: workflow_dispatch: pull_request: push: branches: - '[0-9]+.[0-9]+.x' jobs: qodana: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2024 with: args: -e,ORG_GRADLE_PROJECT_onstructiveUsername=${{ secrets.M2_USER }},-e,ORG_GRADLE_PROJECT_onstructivePassword=${{ secrets.M2_PWD }}
错误配置示例
以下是错误的配置示例,会导致构建失败:
name: Qodana on: workflow_dispatch: pull_request: push: branches: - '[0-9]+.[0-9]+.x' jobs: qodana: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2024 with: args: -e ORG_GRADLE_PROJECT_onstructiveUsername=${{ secrets.M2_USER }},-e ORG_GRADLE_PROJECT_onstructivePassword=${{ secrets.M2_PWD }}
解释
在正确的配置中,-e 选项用于设置环境变量,每个环境变量的定义之间使用逗号分隔。 ORG_GRADLE_PROJECT_onstructiveUsername 和 ORG_GRADLE_PROJECT_onstructivePassword 是 Gradle 项目中用于访问私有 Maven 仓库的属性。${{ secrets.M2_USER }} 和 ${{ secrets.M2_PWD }} 是 GitHub Secrets 中存储的用户名和密码,用于保护敏感信息。
注意事项
- 确保在 GitHub 仓库的 Secrets 中正确配置了 M2_USER 和 M2_PWD。
- 如果环境变量名称中包含特殊字符,请确保进行适当的转义。
- 在本地使用 docker 运行 Qodana 时,可以使用 -e 选项直接设置环境变量,例如:
docker run --rm -it -p 8080:8080 -v /src:/data/project/ -v /src/build/results:/data/results/ -e ORG_GRADLE_PROJECT_onstructiveUsername=user -e ORG_GRADLE_PROJECT_onstructivePassword=password jetbrains/qodana-jvm-community:latest --show-report
总结
正确使用逗号分隔 args 参数中的环境变量,是成功传递环境变量给 Qodana 的关键。通过本教程,你应该能够解决在使用 GitHub Actions 运行 Qodana 时环境变量传递失败的问题,从而顺利进行代码质量检查。