Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 访问云构建yaml中的谷歌云秘密_Google Cloud Platform_Google Cloud Build_Google Secret Manager_Cloudbuild.yaml - Fatal编程技术网

Google cloud platform 访问云构建yaml中的谷歌云秘密

Google cloud platform 访问云构建yaml中的谷歌云秘密,google-cloud-platform,google-cloud-build,google-secret-manager,cloudbuild.yaml,Google Cloud Platform,Google Cloud Build,Google Secret Manager,Cloudbuild.yaml,我正试图从谷歌秘密管理器那里得到秘密。根据访问机密的文档,入口点应该是bash,但我有不同的入口点。试图找出如何在我的步骤“创建数据流模板”中获得秘密。似乎无法在步骤外部访问环境变量值 steps: - id: 'Pull dataflow-python3 docker image & load secrets' name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest' entrypoint: 'bash'

我正试图从谷歌秘密管理器那里得到秘密。根据访问机密的文档,入口点应该是bash,但我有不同的入口点。试图找出如何在我的步骤“创建数据流模板”中获得秘密。似乎无法在步骤外部访问环境变量值

steps:
  - id: 'Pull dataflow-python3 docker image & load secrets'    
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        git rev-parse --short HEAD > COMMIT_ID
        commitId=$(cat COMMIT_ID)
        echo "Project Id is $PROJECT_ID"
        echo "Commit SHA is $COMMIT_SHA"
        echo "Commit Id is ${commitId}"
        echo "Secret key 'TEST' has value '$$TEST'"
    secretEnv: ['TEST']

  - id: "Activate virtual environment venv"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: '/bin/bash'
    args: [ '-c', 'source /venv/bin/activate' ]
    waitFor: ['-']

  - id: "Create dataflow template"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'python'
    args: 
    - -m
    - main
    - --job_name=test-df
    - --project=$PROJECT_ID
    - --region=us-east1
    - --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template
    - --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/
    - --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/
    - --runner=DataflowRunner
    - --setup_file='./setup.py'
    - --autoscaling_algorithm=NONE
    - --DUMMY=$$TEST
    secretEnv: ['TEST']
    waitFor: [
      'Pull dataflow-python3 docker image & load secrets',
      'Activate virtual environment venv'
      ]

availableSecrets:
  secretManager:
  - versionName: projects/my-project/secrets/TEST/versions/latest
    env: 'TEST'

在数据流管道中传递的值

秘密值:

生成日志1:

生成日志2:

我在不同的配置中进行了测试,其行为与云内构建“一致”。事实上,您不能像替换变量那样使用
env
secretnv

env
secretnv
仅在命令的执行上下文中可用,而不在命令的配置中可用

这意味着:

  • 如果运行使用环境变量的应用程序或脚本,则
    env
    secretnv
    可以工作
  • 如果在步骤的参数中使用
    env
    secretnv
    ,则该选项无效

但这很微妙

下面是执行BASH命令->工作的上下文

  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "bash"
    args:
      - -c
      - echo $$TEST
    secretEnv: ['TEST']
这里是步骤echo->不工作的参数

  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "echo"
    args:
      - $$TEST
    secretEnv: ['TEST']

所以,要解决您的问题,请这样做

  - id: "Create dataflow template"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'bash'
    args: 
    - -c
    - python main \
     --job_name=test-df \
     --project=$PROJECT_ID \
     --region=us-east1 \
     --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
     --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
     --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
     --runner=DataflowRunner \
     --setup_file='./setup.py' \
     --autoscaling_algorithm=NONE \
     --DUMMY=$$TEST
    secretEnv: ['TEST']
    waitFor: [
      'Pull dataflow-python3 docker image & load secrets',
      'Activate virtual environment venv'
      ]


我在不同的配置中进行了测试,其行为与云中构建“一致”。事实上,您不能像替换变量那样使用
env
secretnv

env
secretnv
仅在命令的执行上下文中可用,而不在命令的配置中可用

这意味着:

  • 如果运行使用环境变量的应用程序或脚本,则
    env
    secretnv
    可以工作
  • 如果在步骤的参数中使用
    env
    secretnv
    ,则该选项无效

但这很微妙

下面是执行BASH命令->工作的上下文

  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "bash"
    args:
      - -c
      - echo $$TEST
    secretEnv: ['TEST']
这里是步骤echo->不工作的参数

  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "echo"
    args:
      - $$TEST
    secretEnv: ['TEST']

所以,要解决您的问题,请这样做

  - id: "Create dataflow template"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'bash'
    args: 
    - -c
    - python main \
     --job_name=test-df \
     --project=$PROJECT_ID \
     --region=us-east1 \
     --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
     --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
     --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
     --runner=DataflowRunner \
     --setup_file='./setup.py' \
     --autoscaling_algorithm=NONE \
     --DUMMY=$$TEST
    secretEnv: ['TEST']
    waitFor: [
      'Pull dataflow-python3 docker image & load secrets',
      'Activate virtual environment venv'
      ]


@guillaume blaquiere提供的代码可以工作,但问题的根本原因是
入口点
,如中所述:

在要指定密码的生成步骤中:

  • 添加一个指向bash的入口点字段以在构建步骤中使用bash工具这是引用环境变量获取机密所必需的。
  • 添加指定环境变量的secretNV字段
  • 在args字段中,添加-c标志作为第一个参数在-c之后传递的任何字符串都被视为命令。有关使用-c运行bash命令的更多信息,请参阅bash文档
  • 在args字段中指定机密时,请使用前缀为$$的环境变量指定它
在您的示例中,您使用:

 entrypoint: 'python'
args: 
    - -m
entrypoint
不是
bash
,并且第一个参数没有设置标志
-c

纪尧姆的例子也是如此:

 - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "echo"
    args:
      - $$TEST
    secretEnv: ['TEST']
入口点不是
bash
,但在他的第一个示例中是

另一方面,在提供的解决方案中,入口点是
bash
,第一个参数是标志
-c
,因此这将起作用:

- id: "Create dataflow template"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'bash'
    args: 
    - -c
    - python main \
     --job_name=test-df \
     --project=$PROJECT_ID \
     --region=us-east1 \
     --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
     --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
     --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
     --runner=DataflowRunner \
     --setup_file='./setup.py' \
     --autoscaling_algorithm=NONE \
     --DUMMY=$$TEST
    secretEnv: ['TEST']
    waitFor: [
      'Pull dataflow-python3 docker image & load secrets',
      'Activate virtual environment venv'
      ]

解决方案是准确的,但原因是
入口点和第一个标志
-c

由@guillaume blaquiere提供的代码可以工作,但问题的根本原因是
入口点,如中所述:

在要指定密码的生成步骤中:

  • 添加一个指向bash的入口点字段以在构建步骤中使用bash工具这是引用环境变量获取机密所必需的。
  • 添加指定环境变量的secretNV字段
  • 在args字段中,添加-c标志作为第一个参数在-c之后传递的任何字符串都被视为命令。有关使用-c运行bash命令的更多信息,请参阅bash文档
  • 在args字段中指定机密时,请使用前缀为$$的环境变量指定它
在您的示例中,您使用:

 entrypoint: 'python'
args: 
    - -m
entrypoint
不是
bash
,并且第一个参数没有设置标志
-c

纪尧姆的例子也是如此:

 - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "echo"
    args:
      - $$TEST
    secretEnv: ['TEST']
入口点不是
bash
,但在他的第一个示例中是

另一方面,在提供的解决方案中,入口点是
bash
,第一个参数是标志
-c
,因此这将起作用:

- id: "Create dataflow template"
    name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
    entrypoint: 'bash'
    args: 
    - -c
    - python main \
     --job_name=test-df \
     --project=$PROJECT_ID \
     --region=us-east1 \
     --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
     --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
     --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
     --runner=DataflowRunner \
     --setup_file='./setup.py' \
     --autoscaling_algorithm=NONE \
     --DUMMY=$$TEST
    secretEnv: ['TEST']
    waitFor: [
      'Pull dataflow-python3 docker image & load secrets',
      'Activate virtual environment venv'
      ]

解决方案是准确的,但原因是
入口点
和第一个标志
-c

是否有错误?@sethvargo我没有收到错误,传递到管道的值为“$TEST”。添加了屏幕快照,您期望有什么价值?您是否检查了存储在SecretManager中的值?(好吧,这是一个愚蠢的问题,但请仔细检查!)@guillaume blaquiere添加了屏幕截图
$$
是否“转义”第一个美元您是否收到错误?@sethvargo我没有收到错误,传递到管道的值是“$TEST”。添加了屏幕快照,您期望有什么价值?您是否检查了存储在SecretManager中的值?(好吧,这是一个愚蠢的问题,但请仔细检查!)纪尧姆·布拉奎尔添加了屏幕截图
$
是否“逃离”了第一块钱