gitlab ci не может найти команду docker buildx с исполнителем оболочки - PullRequest
1 голос
/ 05 августа 2020

У меня проблемы с тем, чтобы мой gitlab-runner выполнил команду docker buildx. У меня есть gitlab-runner, который настроен следующим образом:

[[runners]]
  name = "Name"
  url = "https://gitlab.mypage.com/"
  token = "token"
  executor = "shell"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

И конвейер, который запускается:

stages:
  - test
  - build

test_backend:
  stage: test
  script:
    - exit 0
  only:
    - merge_request
    - master

build:
  stage: build
  script:
    - docker login someregistry -u xxxx -p yyyy
    - docker buildx ls
  only:
    - merge_request
    - master
    - dev

Я немного запутал код.

У меня проблема в том, что команда входа docker выполняется правильно, а команда docker buildx - нет. Я уже тестировал команду вручную на машине, и она была успешной.

Кто-нибудь может мне здесь помочь?

enter image description here

enter image description here

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Я нашел решение своей проблемы. Чтобы использовать экспериментальные функции, вы можете установить переменные среды.

$env:DOCKER_CLI_EXPERIMENTAL=enabled

эту команду можно использовать в конвейере ci.

Похоже, что docker cli в Программа-исполнитель оболочки отличается от docker cli, которую вы можете использовать в системе, если попробуете. Очень запутанно.

0 голосов
/ 05 августа 2020

По моему опыту с бегунами docker, наиболее вероятная ситуация состоит в том, что бегун docker не имеет включенных экспериментальных функций только потому, что они есть в базе docker ... Я испытал подобные вещи в прошлое: docker в раннере НЕ ЯВЛЯЕТСЯ docker там, где вы размещаете бегун в!

Вероятно, вам придется добавить службу DIND (Docker в Docker) для этого, потому что насколько я понимаю в этой системе бегуна, только тогда docker с вашего хоста подключается к docker внутри бегуна.

Мы сделали это вот так:

  # gitlab-runner
gitlab-runner:
container_name: vivavis.gitlab-runner
image: gitlab/gitlab-runner:latest
restart: always
volumes: 
  - gitlab-runner:/etc/gitlab-runner
  - /var/run/docker.sock:/var/run/docker.sock // <<<<<< THIS IS THE IMPORTANT LINE
networks:
  - swp-infra-code

Небольшое предупреждение здесь:

При активации мы обнаружили ошибку / не очень хорошо очищенную вещь: поскольку GitLab Runner теперь связан с базой docker, изображения, которые будут созданы во время работы CI / CD не удаляются должным образом: GitLab не реализовал эту функцию, он просто предполагает, что когда умирает контейнер gitlab-runner, все данные умирают внутри. Но при таком подключении данные здесь не умирают, потому что они не создаются в контейнере - они создаются в базе docker.

...