Изображение Gitlab Runner с учетными данными GCP - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь научить свой образ Gitlab Runner получать пользовательские образы сборщика из моего личного реестра Docker (GCR работает в Google Cloud).

Что не сработало? Iсоздал пользовательский образ Gitlab Runner с правильно установленным ServiceAccount.Я начал в непривилегированном режиме, но с червоточиной (через docker.sock).При выполнении в этом контейнере (который основан на gitlab/gitlab-runner:v11.3.0) мне пришлось признать, что я не могу делать там какие-либо команды docker (ни как root, ни как пользователь gitlab).То, как gitlab-runner запускает контейнеры-сборщики впоследствии, намного выше моих когнитивных способностей.;)

# got started via eu.gcr.io/my-project/gitlab-runner:0.0.5 which got taught the GCR credentials

stages:
    - build

build:
    image: docker pull eu.gcr.io/my-project/gitlab-builder-docker:0.0.2
    stage: build
    script: 
        # only for test if I have access to private docker registry
        - docker pull eu.gcr.io/my-project/gitlab-builder-docker:0.0.1 

Что сработало? Согласно этому учебному пособию вы можете проходить аутентификацию с помощью блока before_script в файлах .gitlab-ci.yml.Это сработало.

# got started via gitlab/gitlab-runner:v11.3.0 

stages:
    - build

before_script:
    - apk add --update curl python which bash
    - curl -sSL https://sdk.cloud.google.com | bash
    - export PATH="$PATH:/root/google-cloud-sdk/bin"
    - gcloud components install docker-credential-gcr
    - gcloud auth activate-service-account --key-file=/key.json
    - gcloud auth configure-docker --quiet

build:
    image: docker:18.03.1-ce
    stage: build
        # only for test if I have access to private docker registry
        - docker pull eu.gcr.io/my-project/gitlab-builder-docker:0.0.1 

Вопрос Это означает, что я должен делать это (устанавливать gcloud & authenticate) при каждом запуске сборки - я бы предпочел сделать это в gitlabизображениеУ вас есть идея, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Наконец-то я нашел способ сделать это.

Научите ванильного бегуна, как вытащить из личного репозитория GCR Docker

GCP

  1. Создать учетную запись службы без разрешений вIAM & Admin
  2. Загрузить Json Key
  3. Добавить разрешения в Storage Browser
    1. Выбрать корзину, содержащую ваши изображения (например, eu.artifacts.my-project.appspot.com )
    2. Предоставить разрешение Storage Object Admin на учетную запись службы

Локальный Докер Контейнер

  1. Запустите контейнер library/docker и выполните в нем exec (с шаблоном Docker Wormhole docker.sock крепление тома)
  2. Войдите в GCR через (Проверьте URL вашего репо,в моем случае он находится в Европе, поэтому префикс eu в URL) docker login -u _json_key --password-stdin https://eu.gcr.io < /etc/gitlab-runner/<MY_KEY>.json
  3. Проверьте, работает ли он через некоторые docker pull <MY_GCR_IMAGE>
  4. Скопируйте содержимое ~ / .docker / config.json

Gitlab config.toml конфигурация

  1. Добавитьследующее в ваш config.toml file [[runners]] environment = ["DOCKER_AUTH_CONFIG={ \"auths\": { \"myregistryurl.com:port\": { \"auth\": \"<TOKEN-FROM-DOCKER-CONFIG-FILE>\" } } }"]

Vanilla Gitlab Runner Container

  1. Запустите бегунок, например, вот так docker run -it \ --name gitlab-runner \ --rm \ -v <FOLDER-CONTAININNG-GITLAB-RUNNER-CONFIG-FILE>:/etc/gitlab-runner:ro \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:v11.3.0

Ваш файл .gitlab-ci.yml

  1. Проверьте выполненную работу с помощью .gitlab-ci.yml
    1. Используйте изображение, которое находится в вашем личном GCP Container Registry

Научите ваши изображения строителя, как отправить в свой частный репозиторий GCR Docker

GCP

  1. Добавить разрешения для вашей учетной записи службы
    1. Предоставить разрешение Storage Legacy Bucket Reader для вашей учетной записи службы в Storage Browser

Пользовательское изображение Docker Builder

  1. Добавьте файл ключа учетной записи службы в свое пользовательское изображение FROM docker:18.03.1-ce ADD key.json /<MY_KEY>.json

Ваш файл .gitlab-ci.yml

  1. Добавьте следующий скрипт в ваш before_script раздел docker login -u _json_key --password-stdin https://eu.gcr.io < /key.json

Заключительные мысли

Теперь ванильный бегун может вытащить вашу собственную картинкуGES от вашего личного GCR Docker Repo.Кроме того, эти настраиваемые пользовательские изображения также могут общаться с вашим частным GCR Docker Repo и, например, передавать полученные изображения вашего конвейера сборки.

Это было довольно сложно.Возможно, в будущем Gitlab расширит поддержку этого варианта использования.

0 голосов
/ 25 сентября 2018

Вы пытались использовать Google Cloudbuild?У меня была та же проблема, и я решил ее так:

echo ${GCR_AUTH_KEY} > key.json
gcloud auth activate-service-account --key-file key.json
gcloud auth configure-docker

gcloud builds submit . --config=cloudbuild.yaml --substitutions _CI_PROJECT_NAME=$CI_PROJECT_NAME,_CI_COMMIT_TAG=${CI_COMMIT_TAG},_CI_PROJECT_NAMESPACE=${CI_PROJECT_NAMESPACE}

cloudbuild.yaml:

steps:
 - name: gcr.io/cloud-builders/docker
    id: builder
    args: 
      - 'build'
      - '-t'
      - 'eu.gcr.io/projectID/$_CI_PROJECT_NAMESPACE-$_CI_PROJECT_NAME:$_CI_COMMIT_TAG'
      - '.'
 - name: gcr.io/cloud-builders/docker
    id: tag-runner-image
    args: 
      - 'tag'
      - 'eu.gcr.io/projectID/$_CI_PROJECT_NAMESPACE-$_CI_PROJECT_NAME:$_CI_COMMIT_TAG'
      - 'eu.gcr.io/projectID/$_CI_PROJECT_NAMESPACE-$_CI_PROJECT_NAME:latest'
images:
 - 'eu.gcr.io/projectID/$_CI_PROJECT_NAMESPACE-$_CI_PROJECT_NAME:$_CI_COMMIT_TAG'
 - 'eu.gcr.io/projectID/$_CI_PROJECT_NAMESPACE-$_CI_PROJECT_NAME:latest'

просто используйте google / cloud-sdk: alpine как изображение на этапе gitlab-ci

...