Google Cloud Build Docker построить из файла - PullRequest
0 голосов
/ 10 марта 2019

У меня проблема при использовании Google Cloud Build. Я не могу передать ключ в докер с помощью cloudbuild.yaml

Google buildfile.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'

Dockerfile:

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 не работает.

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Каталог .ssh должен иметь необходимые разрешения

RUN mkdir -m 700 -p ~/.ssh &&  
0 голосов
/ 29 марта 2019

GCloud Docker Builder использует форму Exec ENTRYPOINT .Ваши аргументы из cloudbuild.yaml не передаются в оболочку, поэтому ваш cat не будет выполнен.

Почему бы не поручить KMS записать id_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 builder

RUN mkdir -p ~/.ssh
COPY 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.

...