Создание внешней среды автоматической сборки на основе GitLab CI.

внешний интерфейс сервер GitLab

Что такое непрерывная интеграция?

Непрерывная интеграция (CI) означает частую интеграцию кода в магистраль (несколько раз в день).

GitLab CI

Что такое GitLab CI?

GitLab CIдаGitLab Continuous Integration(Непрерывная интеграция Gitlab) для краткости. отGitLabНачиная с версии 8.0,GitLabполностью интегрированныйGitlab-CIи включен по умолчанию для всех проектов. Просто добавьте в корневой каталог репозитория проекта.gitlab-ci.ymlфайл и настроитьRunner(раннер), затем каждый запрос на слияние (MR) илиpushвызоветCI pipeline.

Если все работает нормально, вы получите тег, связанный с фиксацией. Как показано на рисунке:

Что такое трубопровод?

однаждыPipelineФактически это эквивалент задачи сборки, которая может содержать несколько процессов, таких как установка зависимостей, выполнение тестов, компиляция, развертывание тестовых серверов и развертывание рабочих серверов. Любой коммит или мерж-реквест может быть запущенPipeline,Как показано ниже:


+------------------+           +----------------+
|                  |  trigger  |                |
|   Commit / MR    +---------->+    Pipeline    |
|                  |           |                |
+------------------+           +----------------+

Что такое Этапы?

StagesУказывает этап строительства, который является процессом, упомянутым выше. мы можем один разPipelineопределить несколькоStages,ЭтиStagesОн будет иметь следующие особенности:

  • всеStagesбудет выполняться последовательно, т. е. когдаStageПо завершению следующийStageНачнется
  • ТолькоStagesПо завершении задача сборки (Pipeline) будет успешным
  • если естьStageне получается, то последнийStagesне будет выполняться, задача сборки (Pipeline) потерпеть неудачу

следовательно,Stagesа такжеPipelineОтношения:

+--------------------------------------------------------+
|                                                        |
|  Pipeline                                              |
|                                                        |
|  +-----------+     +------------+      +------------+  |
|  |  Stage 1  |---->|   Stage 2  |----->|   Stage 3  |  |
|  +-----------+     +------------+      +------------+  |
|                                                        |
+--------------------------------------------------------+

Что такое рабочие места?

JobsПредставляет строительные работы и представляет работу, выполненную на этапе. мы можемStagesопределить несколькоJobs,ЭтиJobsОн будет иметь следующие особенности:

  • такой жеStageсерединаJobsбудет выполняться параллельно
  • такой жеStageсерединаJobsЭтап будет успешным только тогда, когда оба будут выполнены успешно
  • если естьJobтерпит неудачу, тоStageтерпит неудачу, то есть задача сборки (Pipeline) потерпеть неудачу

так,Jobsа такжеStageСхема отношений такова:


+------------------------------------------+
|                                          |
|  Stage 1                                 |
|                                          |
|  +---------+  +---------+  +---------+   |
|  |  Job 1  |  |  Job 2  |  |  Job 3  |   |
|  +---------+  +---------+  +---------+   |
|                                          |
+------------------------------------------+

Конфигурация установки

Среда установкиUbuntu 16.04.4 LTS (GNU/Linux 4.4.0-105-generic x86_64),dockerВерсияDocker version 18.03.1-ce, build 9ee9f40

  • Установитьgitlab-ci-multi-runner

# For Debian/Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

# For RHEL/CentOS
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

  • Проверитьdocker images

sudo docker images

Как использовать GitLab CI?

  • Создан в корневом каталоге проекта.gitlab-ci.ymlфайл, код файла выглядит следующим образом:

stagesопределениеStages, по умолчанию их триStages, соответственноbuild,test,deploy.Job.onlyопределить толькоdevelopВетки, связанные с триггеромJobs.


stages:
    - build
job1:
    # 是否开启 debug 模式
    # variables:
    #     CI_DEBUG_TRACE: "true"
    stage: build
    tags:
        - 新建 runner 的标签
    only:
        - develop
    script:
        - cd public
        - npm i
        - npm run build

  • Войтиpipelineстраница конфигурации

  • ЗаписыватьURLа такжеToken, осталось зарегистрироватьсяrunnerиспользовать

зарегистрировать бегуна

  • регистрrunner,runnerПосле успешной регистрации вы окажетесь вpipelineстраницу конфигурации см.specific runnersНиже приведено больше, чем то, что вы только что добавили.runner.

sudo gitlab-ci-multi-runner register

# Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

你的 URL

# Please enter the gitlab-ci token for this runner

你的 Token

# Please enter the gitlab-ci description for this runner

my-runner

# Please enter the gitlab-ci tags for this runner (comma separated)

my-runner

Whether to run untagged builds [true/false]:

false

Whether to lock Runner to current project [true/false]:

false

# Please enter the executor: shell, docker, docker-ssh, ssh?

docker

# Please enter the Docker image (eg. ruby:2.1):

node:9.4.0

  • удалитьrunner

sudo gitlab-ci-multi-runner unregister --url url地址 --token tocken值

  • Проверитьrunnerусловие

sudo gitlab-ci-multi-runner status

  • Проверитьrunnerсписок

sudo gitlab-ci-multi-runner list

  • Проверитьrunnerконфигурационный файл

sudo vim /etc/gitlab-runner/config.toml

ты закончил

переключиться на проектPipelinesстранице, если обнаружены следующие ситуации, это означает, что вашrunnerОн был настроен, и каждый ваш коммит будет запускатьrunner.

Примечание

  • При использовании GitLab CI для клонирования частного репозитория вам будет предложеноHost key verification failed.

    Необходимо выполнить следующую настройку,KeyзаписыватьSSH_PRIVATE_KEY,ValueНаписать серверprivate SSH key. затем в.gitlab-ci.ymlНапишите следующий код перед файлом и сохраните его.

```powershell

before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # Run ssh-agent (inside the build environment)
    - eval $(ssh-agent -s)
    # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

```

Ссылка на ссылку

Getting GitLab CI to clone private repositories

Непрерывная интеграция с GitLab CI