Перейти к содержанию

Задания

Конфигурация пайплайна начинается с заданий. Задания являются наиболее фундаментальным элементом файла .appseccode-ci.yml.

Задания:

  • Определяются ограничениями, указывающими, при каких условиях они должны быть выполнены.
  • Являются элементами верхнего уровня с произвольным именем и должны содержать как минимум один script.
  • Не ограничены в количестве определений.

Например:

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"

Приведенный выше пример представляет собой простейшую конфигурацию CI/CD с двумя отдельными заданиями, каждая из которых выполняет свою команду. Конечно, команда может выполнять код напрямую (./configure;make;make install) или запускать скрипт (test.sh) в репозитории.

Задания подхватываются средствами выполнения (раннерами) и выполняются в окружении средства выполнения. Важно, что все эти задания выполняются независимо друг от друга.

Просмотр заданий в пайплайне

При обращении к пайплайну можно просмотреть связанные с ним задания.

Выбор отдельного задания приводит к отображению лога его выполнения и позволяет:

  • Отменить задание.
  • Повторить выполнение задания, если она завершилась неудачей.
  • Повторно выполнить задание, если она завершилась успешно.
  • Стереть лог выполнения задания.

Просмотр заданий в проекте

Для просмотра полного списка заданий, которые были выполнены в проекте:

  1. Выберите Искать или перейти к... и найдите проект.
  2. Выберите Сборка > Задания.

Список можно отфильтровать по статусу заданий.

Повторный запуск задания

Задание можно запустить повторно после его завершения независимо от итогового статуса (выполнено успешно, неудачно или отменено).

При повторном запуске:

  • Создаётся новый экземпляр задания с новым идентификатором.
  • Задание выполняется с теми же параметрами и переменными.
  • Если задание формирует артефакты, они генерируются заново.
  • Новый запуск привязывается к пользователю, инициировавшему повтор.
  • Пропущенные задания, зависящие от текущего, переназначаются на инициатора повтора.
  • Для триггерных заданий запускается новый нисходящий пайплайн с конфигурацией на момент повтора.

Примечание

Выполняется пользователем с проектной ролью не ниже Разработчик. Задание не должно быть архивировано.

Способы повторного запуска задания:

  • Из запроса на слияние. В виджете пайплайна или на вкладке Конвейеры нажмите Запустить снова в строке задания.
  • Из лога задания. В правом верхнем углу страницы задания нажмите Запустить снова.
  • Из пайплайна. Перейдите в Сборка > Конвейеры, откройте нужный пайплайн и в графе пайплайна нажмите Запустить снова на задании.

Повторный запуск всех неудачных или отмененных заданий

Чтобы повторно запустить сразу все неудачные или отмененные задания пайплайна:

  1. Перейдите в Сборка > Конвейеры или на вкладку Конвейеры запроса на слияние.
  2. В строке нужного пайплайна нажмите Запустить снова все неудачные или отмененные задания.

Отмена задания

Задание CI/CD можно отменить до его завершения.

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

  • Если задание ещё не начало выполняться, оно отменяется немедленно.
  • Если задание уже выполняется:
    1. Задание помечается как отменяется.
    2. Текущая выполняющаяся команда завершается до конца. Остальные команды из before_script и script пропускаются.
    3. Если в задании определён after_script, он запускается и выполняется полностью.
    4. Задание помечается как отменено.

Если требуется отменить задание немедленно, не дожидаясь выполнения after_script, используйте принудительную отмену (см. ниже).

Примечание

Выполняется пользователем с проектной ролью не ниже Разработчик.

Способы отмены задания:

  • Из запроса на слияние. В виджете пайплайна или на вкладке Конвейеры нажмите Отменить рядом с нужным заданием.
  • Из лога задания. В правом верхнем углу страницы задания нажмите Отменить.
  • Из пайплайна. Перейдите в Сборка > Конвейеры, откройте нужный пайплайн и в графе пайплайна нажмите Отменить на задании.

Отмена всех заданий пайплайна

Чтобы отменить сразу все задания запущенного пайплайна:

  1. Перейдите в Сборка > Конвейеры или на вкладку Конвейеры запроса на слияние.
  2. В строке нужного пайплайна нажмите Отменить выполняемый конвейер.

Принудительная отмена задания

Если задание не отвечает или требуется отменить его, не дожидаясь выполнения after_script, можно принудительно отменить задание. Принудительная отмена переводит задание из состояния отменяется сразу в состояние отменено.

При принудительной отмене токен задания немедленно отзывается. Если средство выполнения (раннер) ещё выполняет задание, оно теряет доступ к Системе и завершает работу без вызова after_script.

Примечание

Выполняется пользователем с проектной ролью Сопровождающий или Владелец. Задание должно находиться в состоянии отменяется.

Чтобы принудительно отменить задание:

  1. Перейдите на страницу лога задания.
  2. В правом верхнем углу нажмите Принудительно отменить.

Выяснение причины неудачного завершения задания

Когда пайплайн не работает или происходит сбой, есть несколько мест, где можно найти причину:

  • В графе пайплайна, на странице детального представления пайплайна.
  • В виджетах пайплайна, на страницах запросов на слияние и коммитов.
  • В представлениях задания, в глобальном и детальном представлениях задания.

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

Причину можно также увидеть на странице с детальной информацией о задании.

Порядок заданий в пайплайне

Порядок заданий в пайплайне зависит от типа графа пайплайна.

  • Для полных графов пайплайнов задания сортируются по имени.
  • Для мини-графов пайплайнов задания сортируются по статусу, а затем по имени.

Порядок статусов заданий:

  • закончилась неудачей;
  • предупреждение;
  • находится в ожидании;
  • выполняется;
  • с ручным действием;
  • с запуском по расписанию;
  • отменена;
  • завершилась успешно;
  • пропущена;
  • создана.

Ограничения по наименованию задания

В качестве названий заданий нельзя использовать следующие ключевые слова:

  • image
  • services
  • stages
  • types
  • before_script
  • after_script
  • variables
  • cache
  • include
  • true
  • false
  • nil
  • pages:deploy в конфигурации для стадии deploy

Имена заданий должны содержать не более 255 символов.

Используйте уникальные имена для заданий. Если в файле несколько заданий имеют одинаковое имя, в пайплайн добавляется только одна, и трудно предсказать, какая из них будет выбрана. Если одно и то же имя задания используется в одном или нескольких подключенных файлах, параметры объединяются.

Группировка заданий в пайплайне

Если у вас много однотипных заданий, то граф пайплайна становится длинным и трудночитаемым.

Можно автоматически объединять похожие задания в группы. Если имена заданий отформатированы определенным образом, то в стандартных графах пайплайна они сводятся в одну группу (но не в мини-графах).

Вы можете распознать, что в пайплайне есть сгруппированные задания, если не видите внутри них кнопок повтора или отмены. При наведении на них курсора отображается количество сгруппированных заданий. Выберите их, чтобы раскрыть сгруппированные задания.

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

  • Слэш (/), например, slash-test ⅓, slash-test ⅔, slash-test 3/3.
  • Двоеточие (:), например, colon-test 1:3, colon-test 2:3, colon-test 3:3.
  • Пробел, например, space-test 0 3, space-test 1 3, space-test 2 3.

Эти символы можно использовать попеременно.

В приведенном ниже примере три задания находятся в группе с именем build ruby:

build ruby 1/3:
  stage: build
  script:
    - echo "ruby1"

build ruby 2/3:
  stage: build
  script:
    - echo "ruby2"

build ruby 3/3:
  stage: build
  script:
    - echo "ruby3"

На графе пайплайна отображается группа с именем build ruby, состоящая из трех заданий.

Задания упорядочиваются путем сравнения чисел слева направо. Как правило, первое число является индексом, а второе - итоговым значением.

Это регулярное выражение позволяет проверить имена заданий: ([\b\s:]+((\[.*\])|(\d+[\s:\/\\\]+\d+))){1,3}\s*\z. Одна или несколько последовательностей : [...], X Y, X/Y или X\Y удаляются только в конце имен заданий. Совпадающие подстроки, найденные в начале или в середине имен заданий, не удаляются.

Сокрытие заданий

Чтобы временно отключить задание, не удаляя ее из конфигурационного файла:

  • Закомментируйте конфигурацию задания:

    # hidden_job:
    #   script:
    #     - run test
    
  • Если начать имя задания с точки (.), оно не будет обрабатываться в CI/CD:

    .hidden_job:
      script:
        - run test
    

Скрытые задания, начинающиеся с точки (.), можно использовать в качестве шаблонов для переиспользуемой конфигурации:

  • C ключевым словом extends.
  • С YAML-якорями.

Указание переменных при выполнении заданий вручную

При выполнении заданий в ручном режиме можно ввести дополнительные переменные, относящиеся к конкретному заданию.

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

Определите здесь переменные CI/CD, если вы хотите изменить выполнение задания, использующей переменные CI/CD.

Если вы добавляете переменную, которая уже определена в настройках CI/CD или в файле .appseccode-ci.yml, то переменная переопределяется с новым значением. Все переменные, переопределенные с помощью этого процесса, являются expanded и не маскируются.

Задержка выполнения задания

Если вы не хотите запускать задание немедленно, можно использовать ключевое слово when:delayed, чтобы отложить его выполнение на определенный период.

Это особенно полезно для инкрементального развертывания по времени, когда новый код развертывается постепенно.

Например, если вы начинаете развертывать новый код и:

  • Пользователи не испытывают проблем, Система может автоматически завершить развертывание от 0% до 100%.
  • Если у пользователей возникают проблемы при работе с новым кодом, то можно остановить инкрементальное развертывание по времени, отменив работу пайплайна и откатившись к последней стабильной версии.