使用具有秘密管理器优势的云构建运行声纳扫描仪时出错

问题描述

你能帮我解决下面的问题吗? 因为我正在使用云构建进行声纳扫描仪,具有秘密管理器的优势,但面临问题。 并遵循 https://cloud.google.com/cloud-build/docs/securing-builds/use-secrets 的相同步骤 这是我的代码

steps:
  - name: 'gcr.io/$_PROJECT_ID/sonar-scanner:latest'
    entrypoint: 'bash'
    args:
    - '-c'
    - '-Dsonar.host.url=http://sonar:9000/'
    - '-Dsonar.login=$$USERNAME'
    - '-Dsonar.password=$$PASSWORD'
    - '-Dsonar.projectKey=$_BRANCH-analytics'
    - '-Dsonar.sources=.'
    secretEnv: ['USERNAME','PASSWORD']
    dir: 'analytics'
availableSecrets:
  secretManager:
  - versionName: projects/project-id/secrets/sonar_pass/versions/1
    env: 'PASSWORD'
  - versionName: projects/project-id/secrets/sonar_user/versions/2
    env: 'USERNAME'

tags: ['cloud-builders-community']

我面临的问题是:

bash: line 0: bash: -Dsonar.login=$USERNAME: invalid option name
ERROR
ERROR: build step 0 "gcr.io/project-id/sonar-scanner:latest" Failed: step exited with non-zero status: 2

尝试了不同的项目,但找不到解决方案。

如果你们帮助我,我很感激。 谢谢

解决方法

其实我遇到了和你一样的问题。使用 entrypoint: 'bash''-c' 确实非常重要,否则 Cloud Build 无法识别来自机密管理器的变量。

我的 cloudbuild.yaml 步骤如下所示:

steps:
  id: 'sonarQube'
  name: 'gcr.io/$PROJECT_ID/sonar-scanner:latest'
  entrypoint: 'bash'
  args: 
    - '-c'
    - |
      sonar-scanner -Dsonar.host.url=<url> -Dsonar.login=$$SONARQUBE_TOKEN -Dsonar.projectKey=<project-key> -Dsonar.sources=.
secretEnv: ['SONARQUBE_TOKEN']
availableSecrets:
  secretManager:
  - versionName: projects/<project-id>/secrets/sonarqube-token/versions/latest
    env: 'SONARQUBE_TOKEN'

我在使用最新的声纳扫描仪图像时遇到了一些问题,因为它使用了 alpine。我收到下一个错误:jre-bin-java-not-found 即使图像有 Java。基于 this,我基于 Ubuntu 而不是 Alpine 创建了我自己的 Docker 镜像。您可以在 pull request 中找到该图像。

,

我发现了 this 在 Cloud Build 中使用声纳扫描仪的示例。似乎应该在没有 bash

的情况下使用声纳扫描仪

我认为您应该删除 entrypoint: 'bash' '-c'

类似的方法在这个 SO question 中。它应该可以解决这个错误。