Использовать GitLab CI для локального тестирования?

Если проект GitLab настроен на CI GitLab, есть ли способ запустить сборку локально?

Я не хочу превращать свой ноутбук в "бегун" сборки, я просто хочу использовать Docker и .gitlab-ci.yml для локального тестирования тестов (т. .gitlab-ci.yml Все он предварительно настроен). Другим преимуществом этого является то, что я уверен, что я использую ту же среду локально и на CI.

Вот пример того, как запускать сборки Travis локально с помощью Docker, я ищу что-то подобное с GitLab.

Ответ 1

Так как несколько месяцев назад это возможно с помощью gitlab-runner:

gitlab-runner exec docker my-job-name

Обратите внимание, что на вашем компьютере должны быть установлены как docker, так и gitlab-runner.

Вам также понадобится ключ image определенный в вашем .gitlab-ci.yml. Иначе не сработает.

Вот строка, которую я сейчас использую для локального тестирования с помощью gitlab-runner:

gitlab-runner exec docker test --docker-volumes "/home/elboletaire/.ssh/id_rsa:/root/.ssh/id_rsa:ro"

Редактировать: Вы можете избежать добавления --docker-volumes с вашим ключом, установив его по умолчанию в /etc/gitlab-runner/config.toml. Смотрите официальную документацию для более подробной информации.

Из-за путаницы в комментариях я gitlab-runner --help сюда результат gitlab-runner --help, чтобы вы могли видеть, что gitlab-runner может создавать сборки локально:

   gitlab-runner --help
NAME:
   gitlab-runner - a GitLab Runner

USAGE:
   gitlab-runner [global options] command [command options] [arguments...]

VERSION:
   1.1.0~beta.135.g24365ee (24365ee)

AUTHOR(S):
   Kamil Trzciński <[email protected]> 

COMMANDS:
   exec         execute a build locally
   list         List all configured runners
   run          run multi runner service
   register     register a new runner
   install      install service
   uninstall        uninstall service
   start        start service
   stop         stop service
   restart      restart service
   status       get status of a service
   run-single       start single runner
   unregister       unregister specific runner
   verify       verify all registered runners
   artifacts-downloader download and extract build artifacts (internal)
   artifacts-uploader   create and upload build artifacts (internal)
   cache-archiver   create and upload cache artifacts (internal)
   cache-extractor  download and extract cache artifacts (internal)
   help, h      Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug          debug mode [$DEBUG]
   --log-level, -l "info"   Log level (options: debug, info, warn, error, fatal, panic)
   --cpuprofile         write cpu profile to file [$CPU_PROFILE]
   --help, -h           show help
   --version, -v        print the version

Как видите, команда exec предназначена для execute a build locally.

Обратите внимание, что этот процесс состоит в том, чтобы использовать свой собственный компьютер для запуска тестов с использованием док-контейнеров. Это не для определения пользовательских бегунов. Для этого просто зайдите в настройки репозитория CI/CD и прочитайте там документацию. Если вы хотите, чтобы ваш исполнитель выполнялся вместо gitlab.com, добавьте в него настраиваемый и уникальный тег, убедитесь, что он запускает только отмеченные задания, и отметьте все задания, за которые должен отвечать ваш исполнитель.

Ответ 2

Если вы используете Gitlab, используя изображение докера: https://hub.docker.com/r/gitlab/gitlab-ce, можно запускать конвейеры, выставляя локальный docker.sock с параметром volume: -v/var/run/docker.sock: /var/run/docker.sock. Добавление этой опции в контейнер Gitlab позволит вашим работникам получить доступ к экземпляру докера на хосте.

Ответ 3

Бегунок GitLab, похоже, еще не работает в Windows, и существует открытая проблема, чтобы решить эту проблему.

Итак, пока я перемещаю код своего скрипта в скрипт bash, который я могу легко сопоставить с локальным контейнером докера и выполнить.

В этом случае я хочу собрать Docker-контейнер в моей работе, поэтому я создаю скрипт 'build':

#!/bin/bash

docker build --pull -t myimage:myversion .

в моем .gitlab-ci.yaml я выполняю скрипт:

image: docker:latest

services:
- docker:dind

before_script:
- apk add bash

build:
stage: build
script:
- chmod 755 build
- build

Чтобы запустить скрипт локально с помощью powershell, я могу запустить необходимое изображение и сопоставить том с исходными файлами:

$containerId = docker run --privileged -d -v ${PWD}:/src docker:dind

установить bash, если его нет:

docker exec $containerId apk add bash

Установите разрешения для скрипта bash:

docker exec -it $containerId chmod 755 /src/build

Выполните скрипт:

docker exec -it --workdir /src $containerId bash -c 'build'

Затем остановите контейнер:

docker stop $containerId

И, наконец, очистить контейнер:

docker container rm $containerId