# #google-cloud-platform #gitlab #gitlab-ci-runner #kaniko
#google-облачная платформа #gitlab #gitlab-ci-runner #kaniko
Вопрос:
Я хочу создавать образы docker на Gitlab и использовать Kaniko для этого.
Это отлично работает, когда у меня есть только Dockerfile и код из репозитория. Проблема начинается, когда перед сборкой я хочу получить доступ к GCP Secret Manager и получить значения для этой сборки.
Мы создаем изображения непосредственно в Gitlab и сохраняем их в GCR.io .
Ниже приведен пример конфигурации gitlab-ci.yml. Когда мы используем image: Docker, это будет работать, поскольку мы можем использовать curl и т. Д. И установить cloud sdk. Но с Kaniko это невозможно.
dev-build-docker:
stage: build-docker-image
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
environment: Develop
only:
changes:
- xxxxxxxxxxxx
refs:
- develop
services:
- docker:dind
before_script:
- source vars/.variables
- echo $CICD_SA_KEY > ${CI_PROJECT_DIR}/service_key.json
- export GOOGLE_APPLICATION_CREDENTIALS=${CI_PROJECT_DIR}/service_key.json
script:
- apk --no-cache add curl
- apk add bash
- curl https://sdk.cloud.google.com > install.sh
- apt install -y python3
- ./install.sh --disable-prompts
- export PATH=$PATH:/root/google-cloud-sdk/bin
- gcloud auth activate-service-account --key-file ${CI_PROJECT_DIR}/service_key.json
- mkdir creds
- gcloud secrets versions access latest --project=$projectid_dev --secret=xxxxxxxx > creds/dbpass
- DB_PASS=$(cat creds/dbpass)
- gcloud secrets versions access latest --project=$projectid_dev --secret=xxxxxxxxxx-key > creds/creds.2.json
- gcloud secrets versions access latest --project=$projectid_dev --secret=zzzzzzzzzzzzzz-key > creds/creds.1.json
# end of gcloud
- /kaniko/executor --context "$(pwd)" --dockerfile "$(pwd)/Dockerfile" --destination eu.gcr.io/$projectid_dev/xxxxxxxxxxxx:$TAG --destination eu.gcr.io/$projectid_dev/xxxxxxxxxxxx:latest --build-arg NODE_ENV=production --build-arg DB_PASS=$DB_PASS
Kaniko использует busybox, и я не вижу способа установить gcp sdk и получить доступ к секретам. Кому-нибудь удалось использовать команды gcloud до Kaniko executor?
Комментарии:
1. Какой продукт GCP вы используете для развертывания? это облачная сборка?, не могли бы вы предоставить более подробную информацию о реализации вашего кода? Также может быть полезно добавить, как вы пытаетесь получить секреты
2. @FerVelvet Я отредактировал код задания. для полноты примера.
Ответ №1:
Из-за природы kaniko
подход, который вы ищете, невозможен. Основная причина, как вы уже заметили, заключается в том, что busybox имеет ограниченный набор инструментов и его невозможно установить gcloud
с его зависимостями.
Допустим, вы загружаете архивную версию gcloud
и создаете свою собственную kaniko
версию, копируя двоичные файлы Cloud SDK, но затем вы замечаете, что вам также понадобится python, что подразумевает его компиляцию, и это приводит к необходимости дополнительных библиотек и зависимостей, которые в конце кажутся не слишком удобными и создают kaniko
очень большое изображение.
Итак, в конце концов, кажется, что лучший вариант — использовать Docker в подходе Docker. Другой обходной путь, который подразумевает дополнительный шаг, заключается в создании собственного образа kaniko, который содержит ваши секреты, например:
FROM gcr.io/google.com/cloudsdktool/cloud-sdk as secrets
WORKDIR /creds
COPY ./key.json .
RUN gcloud auth activate-service-account --key-file=/secrets/key.json
WORKDIR /secrets
RUN gcloud secrets versions access latest --project=PROJECT_ID --secret=SECRET > creds_2.json
FROM gcr.io/kaniko-project/executor:debug
WORKDIR /build
COPY --from=secrets /secrets/creds_2.json .
Комментарии:
1. Один из способов — использовать артефакты gitlab, но я не слишком уверен, что нужно помещать туда секреты и переходить к работе с kaniko build.
2. Я переключился на использование GCP container builder для конвейеров, где мне нужно получить доступ к secret manager.