Info
Content

Pipelines

.gitlab-ci.yml - это yaml файл в котором определяются инструкции для gitlab-ci


Есть список предопределенных переменных которые можно использовать в джобах
https://docs.gitlab.com/ee/ci/variables/predefined_variables.html


Пайплайны это топлевел компоненты ci/cd

Пайпланы состоят из:

  • Jobs - определяют что делать (сборка, тесты итд)
  • Stages - определяют когда запускать джобы (запускать тесты после сборки итд)

Джобы выполняются раннерами, несколько джоб в одном стейдже выполняются параллельно

Если все джобы в стейдже выполнились успешно, то пайплайн переходит на следующий стейдж, если хоть одна джоба зафейлилась, то пайплайн завершается


Types of pipelines

  • Basic pipelines - запускает все в каждом стейдже по порядку
  • Directed Acyclic Graph Pipeline (DAG) pipelines - базируется на отношениях между джобами и благодаря этому может работать быстрее чем basic pipeline
  • Multi-project pipelines - комбинация пайплайнов из разных проектов
  • Parent-Child pipelines - можно разбить сложный пайплайн на один родительский и несколько дочерних сабпайплайнов которые будут триггериться родительским (все в рамках одного проекта)
  • Pipelines for Merge Requests - запускаются только для MR'ов, а не для каждого коммита
  • Pipelines for Merged Results - are merge request pipelines that act as though the changes from the source branch have already been merged into the target branch
  • Merge Trains - используй pipelines for merged results чтобы ставить их в очередь на слияние один за другим

Configure a pipeline

Пайплайн и его компоненты конфигурируются в конфиге для каждого проекта отдельно

Когда раннер подбирает джобу, гитлаб предоставляет раннеру метадату о джобе (ветвь, коммит, тэг итд) и раннер на основе этого что-то делает

Pipeline type Refspecs
Pipeline for Branches +<sha>:refs/pipelines/<id> and +refs/heads/<name>:refs/remotes/origin/<name>
Pipeline for Tags +<sha>:refs/pipelines/<id> and +refs/tags/<name>:refs/tags/<name>
Pipeline for Merge Requests +<sha>:refs/pipelines/<id>

Пайплайны могут быть также запущены вручную с вручную указанными переменными

Когда пайплайн запускается вручную, то страница 'Run Pipeline' показывает все top-level переменные определенные в .gitlab-ci.yml с description и value и позволяет их переопределить для этого ручного запуска

Пример пайплайна:

variables:
  DEPLOY_ENVIRONMENT:
    value: "staging"  # Deploy to staging by default
    description: "The deployment target. Change this variable to 'canary' or 'production' if needed."
  THIS_VAR_WILL_ALSO_BE_SHOWN:
    value: "testvalue"
    description: "test descr for test var"
  THIS_VAR_WILL_NOT_BE_SHOW: "value"

stages:
  - document

pages:
  stage: document
  image:
    name: mjdk/diagrams:latest
    entrypoint:
      - env
  script:
    - python docs/components.py
    - mkdir -p public
    - cp eks_cluster.png public/
  artifacts:
    paths:
      - public

Screenshot_2021_02_02-12_49_03-2021-07-03-astnhsnth.png


Ключевое слово when может принимать значение manual: when:manual
Тогда джоба не будет запускаться автоматически, а только по клику пользователя

stages:
  - test
  - test2
  - final
a:
  stage: test
  script:
    - echo 0
b:
  stage: test
  script:
    - echo 1
c:
  stage: test
  script:
    - echo 2
d:
  stage: test2
  script:
    - echo 3
e:
  stage: final
  when: manual
  script:
    - echo 4
f:
  stage: final
  when: manual
  script:
    - echo 5

Видно что final требует ручного вмешательства:

Screenshot_2021_02_02-12_49_03-2021-07-03-at-2thththththththct.png

Как видно, можно запустить сразу весь стейдж, либо каждую джобу по отдельности


Каждый пользователь имеет квоты на использование шаред раннеров в личных проектах
Каждая группа также имеет квоты на использование шаред раннеров в проектах внутри этой группы

0  1  2  3  4  5  6  7
   AAAAAAA
      BBBBBBB
                  CCCC

Длительность пайплайна считается так:

(4 - 1) + (7 - 6) => 4

Pipeline quota usage считается так:

2 + 2 + 1 => 5

Visualize pipelines

stages: ["pre", "test", "test2", "final"]
pre:
  stage: pre
  script: ["echo pre"]
a:
  stage: test
  needs: ["pre"]
  script: ["echo 0"]
b:
  stage: test
  needs: ["pre"]
  script: ["echo 1"]
c:
  stage: test
  needs: ["pre"]
  script: ["echo 2"]
d:
  stage: test2
  when: manual
  needs: ["pre", "a", "b", "c"]
  script: ["echo 3"]
e:
  stage: final
  needs: ["pre", "a", "b", "c", "d"]
  script: ["echo 4"]
f:
  stage: final
  needs: ["d"]
  script: ["echo 5"]

Screenshot_2021_02_02-12_49_03-2021-07-03-at-2tthuuhhh.png


Screenshot_2021_02_02-12_49_03-2021-07-0thtaoeuhthththt.gif

Еще есть вот такой чарт с трубами)
Screenshot_2021_02_02-12_49_03-2021-07-03-at-2snthsnthstnhsnthsnth.png

No Comments
Back to top