Gitlab-CI для начинающих — Gitlab Runner

GitLab

Gitlab Runner

Добавьте файл .gitlab-ci.yml в корневую директорию проекта.Вся система непрерывной интеграции поставляется с Gitlab.Все, что вам нужно сделать, это добавить Runner в систему для разбора скриптовой части файла.

Установите Gitlab Runner

официально предоставленспособ установки, личный выбор — установить на macOS, устанавливайте по порядку:

  1. скачать:
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
  1. Открытые разрешения:sudo chmod +x /usr/local/bin/gitlab-runner
  2. Зарегистрировать бегуна
  3. Установите и запустите Runner:
 cd ~
 gitlab-runner install
 gitlab-runner start

Перед тем, как зарегистрировать раннер, нужно сделать некоторые приготовления:

  1. Установить Докер, и начать
  2. Получите токен через интерфейс Gitlab. Процесс приобретения выглядит следующим образом:
  • Войдите в Gitlab и перейдите в Настройки -> CI/CD -> Runners.
  • Полученный Токен показан на рисунке:
    获取到的 Token 如图

Зарегистрируйте Gitlab Runner:

  1. Выполните следующую команду:
sudo gitlab-runner register
  1. Введите URL экземпляра Gitlab:
 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
 https://gitlab.com
  1. Введите токен, используемый для регистрации Runner:
Please enter the gitlab-ci token for this runner
xxx
  1. Введите описание Runner, которое затем можно будет изменить в интерфейсе GitLab:
 Please enter the gitlab-ci description for this runner
 [hostame] my-runner
  1. Ввод привязан к RunnerЭтикетка(Можно изменить):
 Please enter the gitlab-ci tags for this runner (comma separated):
 runner
  1. Выберите, как выполняется Runner:
 Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 docker
  1. Если выбран метод выполнения Docker, вам будет предложено заполнить образ по умолчанию, который также можно определить в .gitlab-ci.yml:
 Please enter the Docker image (eg. ruby:2.1):
 alpine:latest

Gitlab также предоставляет неинтерактивную регистрацию, которую можно сделать с помощью одной команды:

sudo gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "获取的 token " \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "runner" \
  --tag-list "docker,aws" \
  --run-untagged \
  --locked="false" \

После процесса регистрации в каталоге ~/etc/gitlab-runner/ будет сгенерирован конфигурационный файл config.toml, в это время вы можете увидеть активированный Runner в настройках Gitlab:

Настройте файл .gitlab-ci.yml

Здесь размещена только личная конфигурация, подробнаяматериалВы можете найти их все, поэтому я не буду вдаваться в подробности здесь:

stages:
  - build
  - deploy

build:
  image: node:alpine
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    expire_in: 1 week
    paths:
      - dist/
  only:
    - master

deploy_staging:
  image: alpine:latest
  stage: deploy
  before_script:
    - apk update
    - apk add --no-cache rsync openssh
  script:
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa
    - chmod 600 ~/.ssh/id_dsa
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - rsync -rav --delete dist/ "$SERVER_USER_HOST:$SERVER_MASTER_PATH"
  only:
    - master


В конфигурационном файле установлены два проекта, а именно build и deploy.Необходимо добавить некоторые моменты:

  • В проекте сборки отметьте только что созданный dist-файл артефактами, чтобы этот файл можно было повторно использовать в других проектах;
  • авторизоваться на сервере по ssh;
  • Используйте rsync для удаленной синхронизации файлов;
  • Из соображений безопасности файл конфигурации похож на$SERVER_USER_HOSTТакие переменные задаются в Настройках -> CI/CD -> Переменные;
  • Удалить обнаружение тегов в настройках Gitlab:

использоватьКомандная строказапустить Бегун,sudo gitlab-runner run, после успешного запуска скриншот такой:

После успешной сборки скриншот выглядит следующим образом: