来自文件的 Google Cloud Build Docker build-arg

我在使用 Google Cloud Build 时遇到问题。我无法通过 cloudbuild.yaml 将密钥传递给 docker


谷歌构建文件.yaml:


- name: 'gcr.io/cloud-builders/gcloud'

  args:

  - kms

  - decrypt

  - --ciphertext-file=A.enc

  - --plaintext-file=/root/.ssh/id_rsa

  - --location=global

  - --keyring=keyringxxx

  - --key=keyxxx

  volumes:

  - name: 'ssh'

    path: /root/.ssh

- name: 'gcr.io/cloud-builders/docker'

  args: [

    'build', '.',

    '-t', 'gcr.io/$PROJECT_ID/xxx:latest',

    '--build-arg', 'READ_KEY=`cat /root/.ssh/id_rsa`'

  ]

  volumes:

  - name: 'ssh'

文件:


FROM golang:1.11 AS builder


ARG READ_KEY

RUN mkdir -p ~/.ssh &&  \

    echo "$READ_KEY" > ~/.ssh/id_rsa && \

    chmod 0600 ~/.ssh/id_rsa && \

    ssh-keyscan github.com >> /root/.ssh/known_hosts && \

    git config --global url.ssh://git@github.com/XXXX.insteadOf https://github.com/XXXX


......

上面的代码失败了。cat不起作用。


慕娘9325324
浏览 139回答 3
3回答

尚方宝剑之说

.ssh 目录需要有正确的权限RUN mkdir -m 700 -p ~/.ssh &&

海绵宝宝撒

GCloud Docker Builder使用ENTRYPOINT的 Exec 形式。您来自 cloudbuild.yaml 的参数没有传递给 shell,因此您的参数cat不会被执行。为什么不指示 KMSid_rsa直接写入/workspace并完全取消卷ssh?- name: 'gcr.io/cloud-builders/gcloud'  args:  - kms  - decrypt  - --ciphertext-file=A.enc  - --plaintext-file=/workspace/id_rsa  - --location=global  - --keyring=keyringxxx  - --key=keyxxx- name: 'gcr.io/cloud-builders/docker'  args: [    'build', '.',    '-t', 'gcr.io/$PROJECT_ID/xxx:latest'  ]Dockerfile 变为:FROM golang:1.11 AS builderRUN mkdir -p ~/.sshCOPY id_rsa ~/.ssh/RUN ssh-keyscan github.com >> ~/.ssh/known_hosts && \    chmod -R 0600 ~/.ssh/ && \    git config --global url.ssh://git@github.com:.insteadOf https://github.com不要忘记将它安装.gitconfig到额外的构建步骤中。我只是将它作为我的 CI 构建脚本的一部分,而不是需要额外的volume.

繁华开满天机

对于步骤有问题的任何人:COPY id_rsa ~/.ssh/在 docker build 中不持久的地方~/.ssh/id_rsa,对我有用的解决方法是先将文件复制到 App 文件中的目录,然后将其复制到最终目录:ADD id_rsa /app/id_rsa RUN cp /app/id_rsa ~/.ssh/id_rsa我不确定为什么会这样,但是好吧,给你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go