Defer script: Скрипты: async, defer

Содержание

как увеличить скорость загрузки страницы со скриптами с помощью defer и async

JS-скрипты, неудачно расположенные в HTML-коде, могут значительно снизить скорость загрузки страницы. Разберемся, как повысить скорость загрузки в старых версиях браузеров и как правильно использовать async и defer, которые поддерживаются в новых версиях.

Это адаптированный перевод статьи Efficiently load JavaScript with defer and async из блога проекта flaviocopes. Повествование ведется от лица автора оригинала.

Расположение имеет значение

Стандартный способ встраивания скрипта в HTML-код страницы выглядит так:

<script src="script.js"></script>

Каждый раз, когда встретится такая или похожая строка, будет выполнен запрос на получение данных файла, а парсер продолжит свою работу после выполнения скрипта.

Классический подход к обучению HTML предполагает, что теги скрипта должны находиться в <head>:

<html>
  <head>
    <title>Title</title>
    <script src="script. js"></script>
  </head>
  <body>
    ...
  </body>
</html>

Однако такой подход приводит к задержкам при загрузке страницы. Когда анализатор доходит до строки со скриптом, он на время останавливается для его извлечения и выполнения, и только после этого переходит к разбору<body>.

Распространенное решение проблемы — перенос скрипта в нижнюю часть страницы, перед закрывающим тегом

<body>. В этом случае скрипт выполняется после того, как вся страница уже проанализирована до тега.

Это лучшее решение по ускорению загрузки страницы для старых браузеров, которые не поддерживают атрибуты async и defer. О последних поговорим отдельно.

async и defer

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

Синтаксически и async и defer — булевые атрибуты, которые используются следующим образом:

<script async src="script. js"></script>
<script defer src="script.js"></script>

Если в коде есть оба атрибута, async имеет приоритет и выполняется в первую очередь в современных версиях браузеров. В старых версиях, напротив, приоритет будет отдан

defer.

Проверить совместимость атрибутов с разными версиями браузеров можно по этим таблицам: раз и два

Важно отметить, что оба атрибута стоит использовать только в верхней части страницы (в <head>): перенос в <body> делает их совершенно бесполезными.

Производительность

Если

async и defer отсутствуют в <head>

Синтаксический анализатор прекращает работу до тех пор, пока скрипт не будет выполнен. Как только этот процесс завершится, анализ продолжится.

Читайте также: Как сохранять фокус на протяжении всего обучения: советы от Хекслета

Если

async и defer отсутствуют в <body>

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

Если

async находится в <head>

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

Если

defer находится в <head>

Скрипт извлекается асинхронно и выполняется только после завершения анализа HTML.

Парсинг проходит с той же скоростью, как если бы скрипт находился в конце тега body, но в целом выполнение скрипта завершается намного раньше, поскольку он загружается параллельно с парсингом HTML. Таким образом этот вариант — наиболее выигрышный с точки зрения скорости загрузки страницы.

Блокировка синтаксического анализа

async приостанавливает синтаксический анализ страницы, а defer — нет.

Блокировка рендеринга

Ни async, ни defer не блокируют рендеринг — этот процесс полностью зависит от кода на странице. Поэтому важно убедиться, что сценарии запускаются после события onLoad.

domInteractive

Скрипты defer выполняются сразу после события domInteractive. Последнее, в свою очередь, происходит после загрузки, анализа и построения DOM HTML.

СSS и изображения на этом этапе еще не проанализированы и не загружены: как только это произойдет, браузер сначала выдаст событие domComplete, а затем — onLoad.

Порядок выполнения

Еще один аргумент за использование defer — скрипты, помеченные как async, выполняются в случайном порядке, тогда как скрипты с defer — в строго определенном.

Как ускорить загрузку страницы

Лучший способ — прописать скрипты в <head> и добавить атрибут defer в тег script. Этот сценарий быстро запускает событие domInteractive :

<script defer src="script.js"></script>

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

Разница между js defer и async

Теги:  асинхронно и отложить

Когда браузер встречаетscriptПри написании сценария:

  1. <script src="script.js"></script>

    НетdeferИлиasync, Браузер загрузит и выполнит указанный скрипт немедленно, «немедленно» означает, чтоscriptПеред элементом документа под тегом, то есть без ожидания загрузки элемента документа позже, он загружается и выполняется при чтении.

  2. <script async src="script.js"></script>

    Есть

    async, Процесс загрузки и отрисовки последующих элементов документа будет таким жеscript.jsЗагрузка и выполнение выполняются параллельно (асинхронно).

  3. <script defer src="myscript.js"></script>

    Есть defer, Процесс загрузки последующих элементов документа будетscript. jsЗагрузка выполняется параллельно (асинхронно), ноscript.jsВыполнение должно быть выполнено после того, как все элементы будут проанализированы,DOMContentLoadedЗавершить до активации события.

Сравнение defer и async

Та же точка:

  • Не блокируйте рендеринг страницы при загрузке файлов;
  • Это недопустимо для встроенного скрипта;
  • Метод document.write нельзя вызывать в сценариях, использующих эти два атрибута;
  • Обратный вызов события загрузки скрипта;
  • Допускается не определять значение атрибута, а использовать только имя атрибута;

разница:

  • Версия html html4.0 определяет defer; html5.0 определяет async; это приведет к тому, что разные версии браузера будут поддерживать разные уровни;
  • Время выполнения: каждый сценарий асинхронного атрибута выполняется сразу после завершения его загрузки, и он будет выполняться перед событием загрузки окна. Следовательно, порядок выполнения сценария может быть нарушен; каждый сценарий атрибута отсрочки выполняется в исходном порядке после анализа страницы и будет выполняться до DOMContentLoaded документа.

Есть три возможных комбинации этих двух атрибутов:

  • Если async имеет значение true, сценарий выполняется асинхронно после завершения загрузки.
  • Если async — false, а defer — true, то скрипт будет выполнен после анализа страницы.
  • Если и async, и defer равны false, скрипт остановит анализ страницы во время анализа страницы, загрузит и выполнит немедленно.

 

** Примечание. На самом деле отложенные сценарии не обязательно выполняются по порядку и не обязательно выполняются до запуска события DOMContentLoaded, поэтому лучше всего включить только один отложенный сценарий.

** Примечание. ** Атрибут defer несовместим между браузерами. (Вместо этого можно использовать Onload)

** Если два атрибута указаны одновременно, будет следовать атрибут async, а атрибут defer будет проигнорирован.


Интеллектуальная рекомендация

[Ytu] _2475 (C ++ Упражняет множественное наследство)

Описание Укажите класс учителей и класс Cadre (Cadres) и используйте множественные методы наследования, чтобы получить новый класс Class Teacher_cadre (учитель и кадра). Требовать: (1) Участники данны…

Сеть обнаружения Android — это нормальный код!

В разработке Android, если приложение необходимо подключиться к сетевому запросу, то лучше всего выяснить, следует ли определить, является ли сеть в Интернете. Сеть продолжит выполнять запрос, если в …

Понять структуру данных

Программа = структура данных + алгоритм основная концепция Данные: опишите символ объективных вещей, является объектом, который можно управлять на компьютере, может быть идентифицирован компьютером и …

Глава 8 «Как работает Tomcat»: загрузчик классов

Основное содержание этой главы разделено на три части: первая часть рассказывает о «модели делегирования» jvm, вторая и третья части — это класс WebappLoader и класс WebappClassLoader.

Мод…

Ява фонд

Во-первых, основной тип 1. Основные типы и виды упаковки 2. Основное введение Java не использует ключевое слово new для основных типов данных, но напрямую хранит переменные в стеке, что более эффектив…

Вам также может понравиться

Сопоставление метода настройки суперпараметров

  В машинном обучении вы всегда будете сталкиваться с такими скучными и трудоемкими вещами, как настройка параметров. К счастью, существует множество библиотек и соответствующих методов, которые …

Springboot + Springsecurity + Keycloak Integration

Недавние проекты команды Доступ к KeyCloak Unified управляемые пользователи, а также аутентификацию входа в систему, и аутентификация независимо реализована каждым проектом. 1. Настройте клиент в KeyC…

ListView

<1> Введение ListView — часто используемый компонент в разработке для Android. Он отображает определенный контент в виде списка и может отображаться адаптивно в зависимости от длины данных.

Для …

Безопасность Android [Базовые знания]

Android lifecycle:   Android system file introduce: Activity lifecycle: App system file introduce: 1. Архитектура Android Уровень приложений Android: apk Уровень платформы Android: DEX Уровень ви…

Структура таблицы виртуальной функции C ++

Оригинальный анализ таблиц виртуальной функции C ++ Различные объекты одного класса имеют одну и ту же виртуальную функциональную таблицу. Любая функция указателя выводит непосредственно от Cout до 1,…

Async & Defer — как правильно загрузить JavaScript

Для устранения ошибок и повышения производительности

Загрузка внешних скриптов в HTML с помощью тега скрипта, вероятно, необходима. Хотя на самом деле это так важно, могут возникнуть проблемы.

async и defer являются атрибутами для классического тега сценария в HTML, который позволяет нам указать, как должен быть загружен наш внешний JavaScript.

Итак, в этой статье мы поговорим о том, как оптимизировать наши теги скрипта с обоими.

Зачем вообще использовать async и defer?

Просто потому, что загрузка и выполнение внешних скриптов может привести к ошибкам, с которыми, вероятно, сталкивался каждый разработчик. Обычно это просто неправильный порядок, потому что документ HTML читается и выполняется браузером сверху вниз — по крайней мере, это стандарт для наших тегов сценариев, которые могут сами содержать код JavaScript или ссылаться на внешний файл. Давайте рассмотрим пример часто возникающей проблемы:

<head>
  <script>
    console.log(document.querySelector('h2'))
  </script>
</head>
<body>
  <h2>our headline</h2>
</body>

Наш console.log теперь будет выводить «null», потому что мы выполняем JavaScript до того, как h2 станет доступным в DOM. Таким образом, querySelector не может получить доступ к элементу, потому что он еще практически не существует.

Не имеет значения, включаем ли мы код в теги сценария или загружаем внешний сценарий в том же месте с тегом сценария, который содержит тот же код — в обоих случаях наш console. log возвращает «null» — потому что наш h2-tag еще не существует.

Важно понимать, что все это происходит потому, что JavaScript также блокирует нашу конструкцию DOM — как только браузер встречает скрипт, он немедленно загружается и выполняется, даже если он действительно должен получить доступ к DOM. , который еще не существует в то время — и он также блокирует построение DOM, потому что браузер отдает приоритет сценарию на этот момент.

И это не единственная проблема

Фактически, что касается только что описанной проблемы, вы могли бы просто сказать, что наши скрипты, которым необходим доступ к DOM, всегда должны быть включены в конец страницы — другими словами, таким образом, чтобы они были только загружается и выполняется, когда модель DOM готова, т. е. страница уже видна пользователю.

Но если браузер теперь встречает скрипт, даже если он находится только в конце страницы, он должен быть сначала полностью загружен и выполнен.

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

Таким образом, пользователь сидит перед явно готовым веб-сайтом, который не может ни на что реагировать, если ему действительно требуется JavaScript в фоновом режиме. Крайне неприятный опыт, особенно на довольно медленных мобильных устройствах с плохим интернет-соединением.

Решение номер 1: асинхронный

Как и defer, async является атрибутом классического тега скрипта, когда мы используем его для включения внешнего скрипта. Использовать его правильно просто и выглядит так:

<script src="jquery.js" async></script>

Так что нам просто нужно включить атрибут async as, как он работает с defer, но об этом позже.

async означает, что наш скрипт загружается параллельно со всеми другими ресурсами, и браузер может построить DOM и загрузить скрипт одновременно. Async гарантирует, что загрузка скрипта больше не блокирует DOM.

Важно

Только загрузка больше не блокируется — как только скрипт завершит загрузку, он будет выполнен немедленно, что, в свою очередь, блокирует браузер во всех его действиях.

И это именно то, на что мы должны обратить внимание при использовании async:
Неясно, когда скрипт завершит загрузку и когда он будет выполнен.
Таким образом, проблема, заключающаяся в том, что наш скрипт хочет получить доступ к чему-то в DOM, но в то время этого даже не существует, также может возникнуть здесь.

Когда НЕ использовать атрибут async для загрузки скриптов
  • Поэтому загрузку скриптов, которые хотят получить доступ к DOM с помощью async, следует использовать с осторожностью.
  • Также опасно загружать несколько скриптов с помощью async, но на самом деле они взаимозависимы, поэтому важно, в каком порядке они должны выполняться, потому что, например, один из двух скриптов — это библиотека, к которой второй скрипт хочет получить доступ.
<script src="library.js"></script>
<script src="app.js"></script>

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

Если мы теперь включим оба с помощью async, решающим моментом будет то, что библиотека, конечно же, намного больше, чем наш app.js, и поэтому загружается соответственно долго. Однако при использовании async оба сценария будут загружаться параллельно, но из-за разного размера они будут завершены в разное время.

Как видно на этой вкладке сети, app.js готов гораздо раньше и, следовательно, запускается раньше. Это также можно относительно легко проверить с помощью console.log в обоих файлах:

Для обоих тестов я установил «быстрый 3G» в инструментах разработчика, чтобы сделать его более реалистичным.

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

Когда использовать атрибут async для загрузки скриптов

Особенно, когда мы загружаем внешние сценарии JavaScripts с другого сервера, конечно, всегда может случиться так, что у него будут короткие задержки или даже сбои.
Без атрибута async этот сценарий блокировал бы загрузку всего нашего веб-сайта на очень долгое время.
Особенно, если сценарий является всего лишь инструментом анализа, таким как Google Analytics, и поэтому не имеет дополнительной ценности для пользователя, мы должны интегрировать его с async по соображениям производительности и безопасности.

В противном случае это также относится ко всем другим скриптам, которые не могут напрямую обращаться к DOM. Исключения подтверждают правило, потому что могут быть случаи, когда это совсем не трагично, если при первом доступе к DOM возвращается «null», потому что элемент еще не существует — например, если все это происходит в интервале по какой-либо причине.

Решение no 2: отложить

Помимо async, существует также defer, с помощью которого мы можем влиять на поведение загрузки наших скриптов.

Как и async, defer не блокирует браузер при загрузке скрипта.
При использовании async решающим моментом было то, что async может блокировать браузер во время выполнения — это не относится к defer.

Сценарий, который был включен в defer, выполняется только тогда, когда DOM готова, поэтому defer идеально подходит для сценариев, которые гарантированно обращаются к DOM.

Общим для async и defer является то, что сценарии загружаются параллельно с построением DOM — только когда сценарии выполняются, различны для обоих. С defer они гарантированно будут выполнены только тогда, когда DOM будет готов.

Давайте еще раз посмотрим на наш пример с библиотекой и app.
js.

Нам просто нужно заменить атрибут async на defer, и готово:

<script src="library.js" defer></script>
<script src="app.js" defer></script>

В консоли сначала выводится console.log из library.js, а затем из app.js — хотя библиотека, конечно, больше и поэтому загружается дольше.

Это потому, что defer точно следует порядку выполнения, который мы указываем с порядком тегов скрипта. Итак, если мы теперь поменяем местами два тега скрипта на их место так, чтобы app.js был наверху, он будет выполнен первым, но, как обычно для defer, только тогда, когда DOM будет готов.

Если мы теперь посмотрим на раздел вкладки сети, мы увидим почти то же самое, что и тогда, когда мы реализовали все это с помощью async. Это связано с тем, что и асинхронная, и отложенная загрузка скриптов параллельны построению DOM.
Но, конечно, по сетевой записи нельзя сказать, что эти двое выполняют сценарии в разное время.

Когда использовать атрибут defer для загрузки скриптов

По сути, этот атрибут идеален для всех скриптов, которым гарантирован доступ к DOM, и он должен делать это успешно любой ценой.

Также идеально, если у нас есть несколько скриптов, которые обращаются друг к другу, то есть они должны выполняться в том порядке, в котором мы хотим, чтобы они были.

Отсрочка идеально подходит для этого, потому что порядок выполнения всегда совпадает с порядком, в котором мы включаем скрипты сверху вниз в DOM — независимо от размера скриптов.

Последний пример

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

Я создал небольшой пример со следующей файловой структурой. Каждый из скриптов просто содержит console.log, чтобы прояснить, какой это скрипт и querySelector для доступа к h2-тегу в DOM, как в нашем index.html, который показан ниже.

├── async.js
├── default.js
├── defer.js
└── index.html

index.html:

<html lang=”en”>
<head>
  <script src=”async.js” async></script>
  <script src=”defer.js” defer></script>
  <script src=”default.js”></script>
</head>
<body>
  <h2>our headline</h2>
</body>
<script>
  console.log(‘embedded:’, document.querySelector(‘h2’))
</script>
</html>

Еще раз подчеркну: все скрипты практически идентичны, отличается только их console.log, но это не проблема. Я назвал default.js таким образом, потому что он включается «обычно» без defer или async.

Вот результат работы консоли браузера в Chrome и Firefox.
(Когда дело доходит до поведения загрузки и выполнения, всегда могут быть отклонения из-за браузера, любых расширений или подключения к Интернету. )

  • Пока результаты должны быть ясны. async.js настолько мал, что загружается очень быстро и, конечно, как обычно для async, выполняется напрямую. На данный момент он еще не может получить доступ к нашему h2, поскольку он еще не существует.
  • default.js загружается «нормально», то есть блокируется во время загрузки и блокируется во время выполнения. Поскольку он включен перед нашим h2-тегом, и браузер читает все сверху вниз, default.js не может получить доступ к элементу.
  • Сценарий, который встроен непосредственно в index.html, определяется под тегом h2 и выполняется только тогда, когда тег h2 уже введен в DOM. Следовательно, он может успешно получить доступ к тегу.
  • defer.js загружается примерно в то же время, что и наш async.js, но, как обычно для defer, он ждет, пока DOM не загрузится. готов. Следовательно, он, конечно, может успешно получить доступ к тегу h2.

Последние слова

Может случиться так, что async.js все-таки сможет получить доступ к элементу, если при загрузке скрипта произошла задержка и браузер уже мог отображать h2-тег в DOM, так что когда async выполняется после отложенной загрузки, сценарий может успешно получить доступ к DOM.

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

Я думаю, что особенно важно упомянуть об этом: когда реальное приложение реализуется с помощью defer и async, это тест, тест, тест. И, конечно же, на разных устройствах с разными подключениями, чтобы избежать возможных ошибок.

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

Примечание на простом английском языке

Вы знали, что у нас четыре публикации и канал на YouTube? Вы можете найти все это на нашей домашней странице plainenglish. io — проявите немного любви, подписавшись на наши публикации и подписавшись на наш канал YouTube!

Использование и примеры | Сетевое сканирование Nmap

  • Сетевое сканирование Nmap
  • Глава 9. Механизм сценариев Nmap
  • Использование и примеры

Хотя NSE имеет сложную реализацию для повышения эффективности, поразительно прост в использовании. Просто укажите -SC для включения наиболее распространенных сценариев. Или укажите --скрипт возможность выбрать собственные сценарии для выполнить, указав категории, имена файлов сценариев или имя каталоги, полные сценариев, которые вы хотите выполнить. Вы можете настроить некоторые скрипты, предоставляя им аргументы через --script-args и --script-args-file опции. --script-help показывает описание того, что делает каждый выбранный скрипт. Два оставшихся варианта, --скрипт-трассировка и --script-updatedb , обычно используются только для отладки и разработки сценариев. Сканирование по сценарию также включено в параметр -A (агрессивное сканирование).

Сканирование сценария обычно выполняется в сочетании со сканированием портов. потому что сценарии могут запускаться или не запускаться в зависимости от состояния порта нашел по скану. С -sn опция это можно запустить сканирование скриптом без сканирования портов, только хост открытие. В этом случае будут доступны только хост-скрипты. Чтобы запустить сканирование сценария без обнаружения хоста и сканирования портов, используйте опции -Pn -sn вместе с -SC или --скрипт . Каждый хост будет предполагается, и по-прежнему будут выполняться только хост-скрипты. Этот метод полезен для таких скриптов, как whois-ip которые используют только адрес удаленной системы и не требуют, чтобы он был вверх.

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

Категории сценариев

Сценарии NSE определяют список категорий, к которым они принадлежат. В настоящее время определенные категории авторизация , трансляция , брут , по умолчанию . открытие , до , эксплойт , внешний , фаззер , навязчивый , вредоносное ПО , сейф , версия и вулн . Имена категорий не чувствительны к регистру. В следующем списке описывается каждая категория.

авторизация

Эти сценарии работают с учетными данными аутентификации (или их обходом) в целевой системе. Примеры включают x11-access , ftp-anon и oracle-enum-users . Скрипты, использующие атаки методом полного перебора для определения учетных данных, вместо этого помещаются в категорию методом полного перебора .

трансляция

Скрипты этой категории обычно выполняют обнаружение узлов. не указан в командной строке путем вещания в локальной сети. Использовать новые цели аргумент скрипта, чтобы позволить этим скриптам автоматически добавлять хосты, которые они обнаруживают, в очередь сканирования Nmap.

грубый

Эти сценарии используют атаки грубой силы для угадывания учетных данных для аутентификации удаленного сервера. Nmap содержит скрипты для перебора десятков протоколов, в том числе http-brute , oracle-brute , snmp-brute и т. д.

по умолчанию

Эти сценарии установлены по умолчанию и запускаются, когда используя -SC или варианты, а не список скриптов с --скрипт . Эта категория также может быть указан явно, как и любой другой используя --script=по умолчанию . Многие факторы учитываться при принятии решения о том, следует ли запускать скрипт по умолчанию:

Скорость

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

Полезность

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

Подробность

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

Надежность

Многие сценарии используют эвристику и сопоставление нечетких сигнатур для получения выводов о целевом хосте или службе. Примеры включают sniffer-detect и sql-инъекция . Если сценарий часто ошибается, он не относится к категории по умолчанию , где он может запутать или ввести в заблуждение обычных пользователей. Пользователи, которые указывают сценарий или категорию напрямую, как правило, более продвинуты и, вероятно, знают, как работает сценарий или, по крайней мере, где найти его документацию.

Навязчивость

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

Конфиденциальность

Некоторые скрипты, в частности те, что относятся к категории внешних , описанной ниже, по самой своей природе раскрывают информацию третьим лицам. Например, сценарий whois должен разглашать целевой IP-адрес региональным реестрам whois. Мы также рассмотрели (и отказались) от добавления сценариев, которые проверяют целевые отпечатки ключей SSH и SSL по базам данных слабых ключей в Интернете. Чем больше сценарий нарушает конфиденциальность, тем менее он подходит для по умолчанию включение категории.

У нас нет точных пороговых значений для каждого из этих критериев, и многие из них субъективны. Все эти факторы являются рассматриваются вместе при принятии решения о продвижении script в категорию по умолчанию . Несколько сценариев по умолчанию: identd-owners (определяет имя пользователя, запускающее удаленные службы с использованием identd), http-auth (получает схему аутентификации и область веб-сайтов, требующих аутентификации) и ftp-anon (проверяет, разрешает ли FTP-сервер анонимный доступ).

открытие

Эти скрипты активно пытаются узнать больше о сеть, запрашивая общедоступные реестры, с поддержкой SNMP устройства, службы каталогов и т.п. Примеры включают html-title (получает заголовок корневого пути веб-сайтов), smb-enum-shares (перечисляет общие ресурсы Windows) и snmp-sysdescr (извлекает сведения о системе через SNMP).

до

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

эксплойт

Эти сценарии нацелены на активное использование некоторых уязвимостей. Примеры включают jdwp-exec и http-shellshock .

внешний

Скрипты этой категории могут отправлять данные в сторонняя база данных или другой сетевой ресурс. Пример из них whois-ip , что делает связь с кто серверы узнать об адресе цели. Всегда возможность того, что операторы сторонних база данных будет записывать все, что вы им отправляете, что в во многих случаях будет указан ваш IP-адрес и адрес цель. Большинство скриптов задействуют трафик строго между сканирующий компьютер и клиент; любые, которые не являются помещается в эту категорию.

фаззер

Эта категория содержит сценарии, предназначенные для отправки серверному программному обеспечению неожиданных или рандомизированных полей в каждом пакете. Хотя этот метод может быть полезен для поиска необнаруженных ошибок и уязвимостей в программном обеспечении, это медленный процесс и высокая пропускная способность. Примером сценария в этой категории является dns-fuzz , который бомбардирует DNS-сервер слегка ошибочными запросами домена до тех пор, пока сервер не выйдет из строя или не истечет указанный пользователем срок.

навязчивый

Это скрипты, которые нельзя классифицировать в безопасная категория , потому что риски слишком высоки, что они сломают целевую систему, израсходуют значительные ресурсы на целевом хосте (например, полоса пропускания или процессорное время), или иным образом восприниматься как вредоносные со стороны системных администраторов цели. Примеры http-open-proxy (который пытается использовать целевой сервер в качестве HTTP-прокси) и snmp-brute (который пытается угадать строка сообщества SNMP устройства путем отправки общих значений такой как общедоступный , частный , и cisco ). Если сценарий не относится к специальной категории версия , он должен быть отнесен к категории безопасный или интрузивный .

вредоносное ПО

Эти сценарии проверяют, является ли целевая платформа заражены вредоносными программами или бэкдорами. Примеры включают smtp-strangeport , который отслеживает SMTP-серверы, работающие с необычными номерами портов, и auth-spoof , который обнаруживает демоны спуфинга identd, которые предоставляют поддельный ответ еще до получения запроса. Оба эти поведения обычно связаны с заражением вредоносным ПО.

сейф

Скрипты которые не были предназначены для сбоя служб, использовать большие пропускная способность сети или другие ресурсы, или дыры в безопасности эксплойтов классифицируются как безопасные . Они реже оскорбляют хотя удаленные администраторы (как и все другие Nmap функции) мы не можем гарантировать, что они никогда не вызовут неблагоприятные реакции. Большинство из них выполняют общие обнаружение сети. Примеры ssh-hostkey (получает ключ хоста SSH) и html-title (берет заголовок из веб-страница). Скрипты в категории версии не классифицируются по безопасности, но любые другие скрипты, не относящиеся к категории безопасные , должны быть помещены в категорию интрузивные .

версия

Скрипты этой специальной категории являются расширение функции определения версии и не может быть выбран явно. Они выбираются для запуска только в том случае, если определение версии ( -sV ). Их вывод нельзя отличить от версии вывод обнаружения, и они не производят сервис или хост результаты скрипта. Примеры являются skypev2-версия , pptp-версия , и iax2-версия .

вулн

Эти сценарии проверяют определенные известные уязвимости и обычно сообщают о результатах только в том случае, если они найдены. Примеры включают realvnc-auth-bypass и afp-path-vuln .

Типы сценариев и этапы

NSE поддерживает четыре типа сценариев, которые различаются по типу целей, которые они выбирают, и фазе сканирования, на которой они выполняются. Отдельные сценарии могут поддерживать несколько типов операций.

Сценарии Prerule

Эти сценарии запускаются перед любой из фаз сканирования Nmap, поэтому Nmap не собирал никакой информации о своих целях пока что. Они могут быть полезны для задач, которые не зависят от определенные цели сканирования, такие как выполнение сетевого вещания запросы на запросы серверов DHCP и DNS SD. Что-нибудь из этого скрипты могут генерировать новые цели для сканирования Nmap (только если вы указываете новые цели аргумент NSE). Например, dns-зона-перенос может получить список IP-адресов в домене, используя передачу зоны запрос, а затем автоматически добавить их в сканирование Nmap целевой список. Сценарии преправил можно идентифицировать по содержанию функция prerule (см. раздел «Правила»).

Сценарии хоста

Скрипты на этом этапе запускаются во время нормальной работы Nmap. процесс сканирования после того, как Nmap выполнил обнаружение хоста, сканирование портов, определение версии и определение ОС против целевой хост. Этот тип скрипта вызывается один раз против каждого целевого хоста, который соответствует его функция hostrule . Примеры это whois-ip, который ищет информацию о владении для целевого IP, и путь-mtu который пытается определить максимальный размер IP-пакета, может достичь цели, не требуя фрагментации.

Служебные сценарии

Эти сценарии выполняются против прослушивания определенных служб на целевом хосте. Например, Nmap включает в себя более 15 Скрипты службы http для работы с веб-серверами. Если хост имеет веб-серверы, работающие на нескольких портах, эти сценарии могут запускать несколько раз (по одному на каждый порт). Это самые общий тип сценария Nmap, и они отличаются содержащий функцию portrule для решение, какие обнаруженные службы должен запускать сценарий против.

Сценарии Postrule

Эти сценарии запускаются после того, как Nmap просканирует все свои цели. Они могут быть полезны для форматирования и представления Вывод Nmap. Например, ssh-ключ наиболее известен своим служебным (portrule) скриптом, который подключается к серверам SSH, обнаруживает их открытые ключи и печатает их. Но оно также включает в себя постулат, проверяющий для дубликатов ключей среди всех просканированных хостов, затем печатает любые найденные. Другое потенциальное использование для postrule скрипт печатает обратный индекс Nmap вывод — показывает, на каких хостах запущена конкретная служба. а не просто перечислять сервисы на каждом хосте. Сценарии постулатов идентифицируются тем, что содержат постправило функция.

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

Аргументы командной строки

Это пять аргументов командной строки, характерных для сканирования сценария:

-SC

Выполняет сканирование сценария с использованием набора сценариев по умолчанию. это эквивалентно --script=по умолчанию . Некоторые из сценарии в этой категории по умолчанию считаются навязчивыми и должны не запускаться в целевой сети без разрешения.

--script <имя файла> | <категория> | <каталог> /| <выражение> [...]

Запускает сканирование сценария, используя список имен файлов, разделенных запятыми, сценарий категории и каталоги. Каждый элемент в списке также может быть Логическое выражение, описывающее более сложный набор скриптов. Каждый элемент интерпретируется сначала как выражение, затем как категория, и наконец, как имя файла или каталога. Специальный аргумент все делает каждый скрипт в базе данных скриптов Nmap имеет право баллотироваться. Аргумент all следует использовать с осторожностью, так как NSE может содержать опасные скрипты, в том числе эксплойты, взломщики аутентификации методом грубой силы и атаки типа «отказ в обслуживании».

Каждый элемент в списке выражений скрипта может иметь префикс + символов для принудительного запуска данного скрипта(ов) независимо от условий в их портуле или hostrule функций. Обычно это делают только опытные пользователи в особых случаях. Например, вы можете захотеть сделать проверка конфигурации на множестве серверов MS SQL, некоторые из которых работает на нестандартных портах. Вместо того, чтобы замедлять сканирование Nmap, работает расширенное определение версии ( -сВ --version-all ), чтобы Nmap распознал ms-sql службы, вы можете заставить сценарий ms-sql-config выполняться для всех целевые хосты и порты, указав --script +ms-sql-config .

Имена файлов и каталогов могут быть относительными или абсолютными. Абсолютные имена используется напрямую. Относительные пути ищутся в сценариев подкаталогов каждого из следующих мест до найденный:

--каталог данных
$NMAPDIR
~/. nmap (not searched on Windows)
\nmap (only on Windows)
the каталог, содержащий nmap исполняемый файл
каталог, содержащий nmap исполняемый файл, за которым следует ../share/nmap (не ищется в Windows)
NMAPDATADIR (не ищется в Windows)
текущий каталог.

Когда указано имя каталога, оканчивающееся на /, Nmap загружает каждый файл в каталоге. чье имя заканчивается на .nse . Все остальные файлы игнорируются, а каталоги не обыскиваются рекурсивно. Когда имя файла учитывая, что он не должен иметь расширение .nse ; при необходимости он будет добавлен автоматически.

См. раздел «Выбор сценария» для примеров и полного объяснение --скрипт опция.

Скрипты Nmap хранятся в скриптах подкаталог каталога данных Nmap по умолчанию (см. Глава 14, Понимание и настройка файлов данных Nmap ). Для эффективности скрипты проиндексированы в база данных, хранящаяся в скрипты/script.db , в котором перечислены категории или категории, к которым принадлежит каждый скрипт. Аргумент all будет выполнять все сценарии в База данных сценариев Nmap, но ее следует использовать с осторожностью, поскольку Nmap может содержать эксплойты, атаки типа «отказ в обслуживании» и другие опасные сценарии.

--script-аргументы <аргументы>

Предоставляет аргументы сценариям. Видеть раздел под названием «Аргументы для сценариев» для подробного объяснения.

--script-args-file <имя файла>

Эта опция аналогична --script-args за исключением того, что вы передаете аргументы в файле, а не в командной строке. Видеть раздел под названием «Аргументы к сценариям» для подробного объяснение.

--script-help <имя файла> | <категория> | <каталог> | <выражение> |все[...]

Показывает справку о сценариях. Для каждого скрипта, соответствующего заданному спецификации, Nmap печатает имя скрипта, его категории и описание. Спецификации такие же, как принятые --скрипт ; так, например, если вы хотите помочь о сценарий ssl-enum-ciphers , вы должны запустить nmap —script-help ssl-enum-шифры . Образец скрипта справка показана в примере 9.2, «Справка по скрипту».

Пример 9.2. Справка по сценарию

 $ nmap --script-help "afp-* и обнаружение"
Начиная с Nmap 7. 40 ( https://nmap.org ) 21 апреля 2017 г., 14:15 UTC.
афп-лс
Категории: открытие сейф
https://nmap.org/nsedoc/scripts/afp-ls.html
  Пытается получить полезную информацию о файлах с томов AFP.
  Вывод должен напоминать вывод  лс  .
afp-serverinfo
Категории: безопасное обнаружение по умолчанию
https://nmap.org/nsedoc/scripts/afp-serverinfo.html
  Показывает информацию о сервере AFP. Эта информация включает в себя сервер
  имя хоста, адреса IPv4 и IPv6 и тип оборудования (например,
    Macmini  или  MacBookPro ).
афп-шоумаунт
Категории: открытие сейф
https://nmap.org/nsedoc/scripts/afp-showmount.html
  Показывает общие ресурсы AFP и ACL.
 

Если -ОХ используется, XML-представление справки скрипта будет записывается в указанный файл.

--скрипт-трассировка

Этот вариант аналогичен --packet-trace , но работает на уровень приложения, а не пакет за пакетом. Если это указан вариант, все входящие и исходящие связь, выполняемая скриптами, распечатывается. отображаемая информация включает связь протокол, исходный и целевой адреса, а также передаваемые данные. Если более 5% передаваемых данных непечатаемые, вместо них даются шестнадцатеричные дампы. Указание --packet-trace включает скрипт отслеживание тоже.

--script-updatedb

Этот параметр обновляет найденную базу данных сценариев в scripts/script.db , который используется Nmap для определения доступных сценариев по умолчанию и категории. Обновление базы данных необходимо только в том случае, если вы добавили или удалили скрипты NSE из по умолчанию scripts каталог или если вы изменили категории любого скрипта. Этот вариант использован сам без аргументов: nmap —script-updatedb .

Некоторые другие параметры Nmap влияют на сканирование скриптов. Большинство выдающимся из них является -сВ . Сканирование версии выполняется автоматически сценарии в версия категория. Скрипты в этой категории немного отличаются от других скриптов, потому что их выходные данные сливаются с результатами сканирования версий, и они не производят никаких вывод сканирования сценария на экран. Если -ОХ используется, типичный вывод сценария будет по-прежнему доступен в Выходной XML-файл.

Другой параметр, влияющий на скриптовый движок, это . Агрессивный режим Nmap подразумевает опция -SC .

Выбор сценария

Параметр --script принимает список, разделенный запятыми. категорий, имен файлов и имен каталогов. Некоторые простые примеры его использования:

nmap —script default,safe

Загружает все сценарии в по умолчанию и сейф категорий.

nmap —script smb-os-discovery

Загружает только smb-os-discovery сценарий. Обратите внимание, что расширение .nse по желанию.

nmap —script default,banner,/home/user/customscripts

Загружает скрипт в по умолчанию категория, скрипт баннер и все .nse файлов в каталоге /home/user/customscripts .

При обращении к сценариям из script.db автор имя, вы можете использовать стиль оболочки ‘ * ’ подстановочный знак.

nmap —script «http-*»

Загружает все скрипты, имя которых начинается с http-, например http-авторизация и http-открытый-прокси . Аргумент к --script должен был быть заключен в кавычки для защиты подстановочный знак из оболочки.

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

nmap —script «не навязчивый»

Загружает все сценарии, кроме навязчивая категория .

nmap —script «по умолчанию или безопасный»

Это функционально эквивалентно nmap —script «по умолчанию, безопасный» . Он загружает все скрипты, находящиеся в категории по умолчанию или сейф категории или обе категории.

nmap —script «по умолчанию и безопасный»

Загружает те сценарии, которые находятся в оба по умолчанию и сейф категорий.

nmap —script «(по умолчанию или безопасный или навязчивый) и не http-*»

Загружает сценарии в по умолчанию , безопасный или навязчивый категории, за исключением тех, имена которых начинаются с http-.

Имена в логическом выражении могут быть категорией, именем файла из script.db или все . Имя любая последовательность символов, не содержащая ‘   ’, «, », ‘ (’, «) » или ‘ ; ’, за исключением последовательностей и , или , и , а не , которые являются операторами.

Аргументы для сценариев

Аргументы могут быть переданы сценариям NSE с помощью --script-args опция. Аргументы описывают таблицу пары ключ-значение и, возможно, значения массива. Аргументы приведены для скрипты в виде таблицы в реестре с именем nmap.registry.args , хотя обычно доступ к ним осуществляется через stdnse.get_script_args функция.

Синтаксис аргументов скрипта аналогичен конструктору таблиц Lua. синтаксис. Аргументы представляют собой список разделенных запятыми имя=значение пар. Имена и значения могут быть строками, а не содержащие пробелы или символы ‘ {’, ‘} ’, ‘ = ’ или «, ». Чтобы включить один из этих символов в строку, заключите строку в одинарные или двойные кавычки. Внутри строки в кавычках \ ’ экранирует кавычки. обратная косая черта только используется для выхода из кавычек в этом особом случае; во всех остальных случаях обратная косая черта интерпретируется буквально.

Значения также могут быть таблицами, заключенными в {} , как и в Луа. Таблица может содержать простые строковые значения, например, список прокси-серверов. хозяева; или более пар имя-значение, включая вложенные таблицы.

Аргументы сценария часто уточняются соответствующими имя сценария, чтобы пользователь непреднамеренно не затронул несколько скрипты с одним общим именем. Например, вы можете установить время ожидания ответа на Broadcast-ping скрипт (и только этот скрипт) установив Broadcast-ping.timeout на количество времени, которое вы готовы ждать. Иногда, однако вы хотите, чтобы аргумент скрипта применялся более широко. если ты убрать квалификацию и указать только timeout=250ms , вы будете устанавливать значение для более десятка скриптов в дополнение к широковещательный пинг . Вы даже можете комбинировать квалифицированные и безоговорочные аргументы, а также наиболее конкретное совпадение имеет приоритет. Например, вы можете указать rlogin-brute.timeout=20s,timeout=250ms . В В этом случае тайм-аут будет составлять 20 секунд для скрипт rlogin-brute и 250 миллисекунд для всех остальных скрипты, поддерживающие эту переменную ( широковещательный пинг , lltd-discovery и т. д.)

Вместо того, чтобы передавать аргументы в командной строке с --script-args , вы можете сохранить их в файле (через запятую или символы новой строки) и укажите только имя файла с --script-args-файл . Указанные параметры с --script-args в командной строке взять приоритет над указанными в файле. Имя файла может быть указывается как абсолютный путь или относительно обычного пути Nmap путь поиска (NMAPDIR и т. д.)

Вот типичный вызов Nmap с аргументами скрипта:

Обратите внимание, что аргументы сценария заключены в одинарные кавычки. Для Оболочка Bash, это предотвращает интерпретацию оболочкой двойных кавычек и выполняет автоматическую конкатенацию строк. Естественно, разные оболочки могут требуют, чтобы вы избегали кавычек или использовали разные кавычки. Смотрите ваш соответствующее руководство. Команда приводит к этой таблице Lua:

 nmap.registry.args = {
  пользователь = "фу",
  пройти = ",{}=бар",
  пути = {
    "/админ",
    "/cgi-бен"
  },
  xmpp-info.server_name = "локальный хост"
}
 

Хотя вы можете получить доступ к значениям напрямую из nmap.registry.args , обычно лучше использовать функцию stdnse.get_script_args следующим образом:

 локальное имя_сервера = stdnse.get_script_args("xmpp-info.server_name")
 

Все аргументы скрипта имеют общее глобальное пространство имен, т. е. nmap.registry.args таблица. По этой причине короткие или двусмысленные имена, такие как пользователь , не рекомендуются. Немного скрипты добавляют к своим аргументам префикс имени скрипта, например smtp-open-relay.domain . Аргументы, используемые библиотеками, которые могут влияют на многие скрипты, обычно имеют имена, начинающиеся с имени библиотека, например smbuser и кредиты.snmp .

Онлайн-портал документации NSE на https://nmap.org/nsedoc/ перечисляет аргументы, которые каждый сценарий принимает, включая любые аргументы библиотеки, которые могут повлиять на сценарий.

Полные примеры

nmap -sC example.com

Простое сканирование по сценарию с использованием набора по умолчанию скрипты.

nmap -sn -sC example.com

Сканирование скриптом без сканирования портов; только хост-скрипты имеет право баллотироваться.

nmap -Pn -sn -sC example.com

Сканирование сценария без обнаружения хоста или сканирования портов. Все хосты предполагаются, и только хост-скрипты имеют право на бегать.

nmap —script smb-os-discovery —script-trace example.com

Выполнение определенного сценария с трассировкой сценария.

nmap —script snmp-sysdescr —script-args creds.snmp=admin example.com

Запуск отдельного сценария, который принимает сценарий аргумент.

nmap —script mycustomscripts,safe example.com

Выполнить все сценарии в каталог mycustomscripts , а также все скрипты в категории сейф .


Set-ExecutionPolicy (Microsoft.PowerShell.Security) — PowerShell | Microsoft Learn

  • Справочник
Модуль:
Microsoft. PowerShell.Security

Задает политики выполнения PowerShell для компьютеров Windows.

Синтаксис

 Set-Execution  Политика
   [-ExecutionPolicy] 
   [[-Scope] ]
   [-Сила]
   [-Что если]
   [-Подтверждать]
   []  

Описание

Командлет Set-ExecutionPolicy изменяет политики выполнения PowerShell для компьютеров Windows. За дополнительную информацию см. в разделе about_Execution_Policies.

Начиная с PowerShell 6.0 для компьютеров, отличных от Windows, политика выполнения по умолчанию Неограниченный и не может быть изменен. Командлет Set-ExecutionPolicy доступен, но PowerShell отображает консольное сообщение о том, что оно не поддерживается.

Политика выполнения является частью стратегии безопасности PowerShell. Политики исполнения определяют можете ли вы загружать файлы конфигурации, такие как ваш профиль PowerShell, или запускать сценарии. А также, должны ли сценарии иметь цифровую подпись перед запуском.

Область действия командлета Set-ExecutionPolicy по умолчанию — LocalMachine , что влияет на всех, кто использует компьютер. Чтобы изменить политику выполнения для LocalMachine , запустите PowerShell с помощью Run. как Администратор .

Чтобы отобразить политики выполнения для каждой области в порядке приоритета, используйте Get-ExecutionPolicy-List . Чтобы увидеть действующую политику выполнения для вашего сеанса PowerShell, используйте Get-ExecutionPolicy без параметров.

Примеры

Пример 1. Установка политики выполнения

В этом примере показано, как установить политику выполнения для локального компьютера.

 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy-List
Политика выполнения
        ----- ---------------
Политика машины не определена
   Пользовательская политика не определена
      Процесс не определен
  Текущий пользователь RemoteSigned
 LocalMachine RemoteSigned 

Командлет Set-ExecutionPolicy использует параметр ExecutionPolicy для указания Политика RemoteSigned . Параметр Scope указывает значение области по умолчанию, Локальная машина . Чтобы просмотреть параметры политики выполнения, используйте командлет Get-ExecutionPolicy с параметр List .

Пример 2. Установка политики выполнения, конфликтующей с групповой политикой

Эта команда пытается установить Политика выполнения области LocalMachine на Restricted . LocalMachine является более строгим, но неэффективным, поскольку конфликтует с Групповая политика. Политика Restricted записывается в куст реестра HKEY_LOCAL_MACHINE .

 PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine
Set-ExecutionPolicy : PowerShell успешно обновил ваши локальные настройки, но параметр
переопределяется групповой политикой, применяемой к вашей системе. Из-за переопределения ваша оболочка сохранит
его текущая действующая политика выполнения "AllSigned".  Обратитесь к администратору групповой политики для
Дополнительная информация. В строке: 1 символ: 20 + Set-ExecutionPolicy <<<< ограничено
PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds
    Куст: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Имя Свойство
---- --------
Путь Microsoft.PowerShell: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Ограничено
ScriptedDiagnostics ExecutionPolicy: без ограничений 

Командлет Set-ExecutionPolicy использует параметр ExecutionPolicy для указания Ограниченная политика . Параметр Scope указывает значение области по умолчанию, LocalMachine . Командлет Get-ChildItem использует параметр Path с поставщиком HKLM для указания расположение реестра.

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

Эта команда получает объект политики выполнения с удаленного компьютера и устанавливает политику на локальный компьютер. Get-ExecutionPolicy отправляет объект Microsoft.PowerShell.ExecutionPolicy вниз трубопровод. Set-ExecutionPolicy принимает ввод конвейера и не требует Параметр ExecutionPolicy .

 PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy 

Командлет Invoke-Command выполняется на локальном компьютере и отправляет ScriptBlock в удаленный компьютер. Параметр ComputerName указывает удаленный компьютер, Server01 . Параметр ScriptBlock запускает Get-ExecutionPolicy на удаленном компьютере. Объект Get-ExecutionPolicy отправляется по конвейеру в Set-ExecutionPolicy . Set-ExecutionPolicy применяет политику выполнения к области действия по умолчанию локального компьютера, Локальная машина .

Пример 4.

Установка области действия политики выполнения

В этом примере показано, как установить политику выполнения для указанной области, CurrentUser . CurrentUser Область действия влияет только на пользователя, задавшего эту область.

 Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy-List
Политика выполнения
        ----- ---------------
Политика машины не определена
   Пользовательская политика не определена
      Процесс не определен
  Текущий пользователь AllSigned
 LocalMachine RemoteSigned 

Set-ExecutionPolicy использует параметр ExecutionPolicy для указания политики AllSigned . Параметр Scope указывает CurrentUser . Чтобы просмотреть параметры политики выполнения, используйте командлет Get-ExecutionPolicy с параметром List .

Действующая политика выполнения для пользователя становится AllSigned .

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

В этом примере показано, как использовать политику выполнения Undefined для удаления политики выполнения для указанный объем.

 Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy-List
Политика выполнения
        ----- ---------------
Политика машины не определена
   Пользовательская политика не определена
      Процесс не определен
  Текущий пользователь не определен
 LocalMachine RemoteSigned 

Set-ExecutionPolicy использует ExecutionPolicy , чтобы указать политику Undefined . Параметр Scope указывает CurrentUser . Чтобы просмотреть параметры политики выполнения, используйте командлет Get-ExecutionPolicy с параметром List .

Пример 6. Установка политики выполнения для текущего сеанса PowerShell

Область Process влияет только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменная среды $env:PSExecutionPolicyPreference и удаляется при завершении сеанса. закрыто.

 Процесс Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope
Политика выполнения
        ----- ---------------
Политика машины не определена
   Пользовательская политика не определена
      Обработать AllSigned
  Текущий пользователь RemoteSigned
 LocalMachine RemoteSigned 

Set-ExecutionPolicy использует параметр ExecutionPolicy для указания AllSigned политика. Параметр Scope задает значение 9.0579 Процесс . Чтобы просмотреть политику выполнения параметров используйте командлет Get-ExecutionPolicy с параметром List .

Пример 7: разблокировать сценарий для его запуска без изменения политики выполнения

В этом примере показано, как политика выполнения RemoteSigned предотвращает запуск неподписанных скрипты.

Лучше всего читать код сценария и проверять его безопасность до с помощью Командлет Unblock-File . Командлет Unblock-File разблокирует сценарии, чтобы они могли выполняться, но не изменить политику выполнения.

 PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
PS> Get-ExecutionPolicy
удаленно подписанный
PS> .\Start-ActivityTracker.ps1
.\Start-ActivityTracker.ps1 : файл .\Start-ActivityTracker.ps1 не может быть загружен.
Файл .\Start-ActivityTracker.ps1 не имеет цифровой подписи.
Скрипт не будет выполняться в системе.
Дополнительные сведения см. в разделе about_Execution_Policies по адресу https://go.microsoft.com/fwlink/?LinkID=135170.
В строке:1 символ:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Информация о категории: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: UnauthorizedAccess
PS> Unblock-File -Path .\Start-ActivityTracker.ps1
PS> Get-ExecutionPolicy
удаленно подписанный
PS> . \Start-ActivityTracker.ps1
Задание 1: 

Set-ExecutionPolicy использует параметр ExecutionPolicy для указания RemoteSigned политика. Политика задана для области по умолчанию, LocalMachine .

Командлет Get-ExecutionPolicy показывает, что RemoteSigned является эффективной политикой выполнения для текущий сеанс PowerShell.

Сценарий Start-ActivityTracker.ps1 выполняется из текущего каталога. Скрипт заблокирован RemoteSigned , поскольку сценарий не имеет цифровой подписи.

Для этого примера код сценария был проверен и проверен на безопасность для выполнения. Файл разблокировки Командлет использует параметр Path для разблокировки скрипта.

Чтобы убедиться, что Unblock-File не изменил политику выполнения, Get-ExecutionPolicy отображает действующая политика выполнения, RemoteSigned .

Сценарий, Start-ActivityTracker.ps1 выполняется из текущего каталога. Сценарий начинается для запуска, потому что он был разблокирован командлетом Unblock-File .

Параметры

-Confirm

-ExecutionPolicy

-Force

-Scope

-Whatif

Вход

. строка, содержащая имя политики выполнения для Set-ExecutionPolicy .

Выходы

Нет

Set-ExecutionPolicy не возвращает никаких выходных данных.

Примечания

Set-ExecutionPolicy не изменяет области MachinePolicy и UserPolicy , поскольку они устанавливаются групповыми политиками.

Set-ExecutionPolicy не переопределяет групповую политику, даже если предпочтение пользователя больше ограничительнее, чем политика.

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

  • about_Execution_Policies
  • about_Group_Policy_Settings
  • about_Providers
  • Get-AuthenticodeSignature
  • Get-ChildItem
  • Get-ExecutionPolicy
  • Вызов команды
  • Set-AuthenticodeSignature
  • Разблокировать файл

Ссылка на ключевое слово `.gitlab-ci.yml` | GitLab

  • Ключевые слова
  • Глобальные ключевые слова
    • по умолчанию
    • включает в себя
      • , включающий: Local
      • включает в себя: Файл
      • включает в себя: Remote
      • включает в себя: шаблон
  • рабочий процесс
    • рабочий процесс: правила
    • рабочий процесс:правила:переменные
  • Ключевые слова работы
    • after_script
    • allow_failure
      • allow_failure:exit_codes
    • Артефакты
      • Артефакты: Пути
      • Артефакты: исключены
      • Артефакты: истекает
      • Артефакты: expose_as 9004 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111. 0004
      • Артефакты: Public
      • Артефакты: Отчеты
      • Артефакты: без повторных
      • Артефакты: когда
    • Перед_ Странство
  • Перед ним. кэш
    • кэш: пути
    • кэш: ключ
      • кэш: ключ: файлы
      • кэш: ключ: префикс
    • кэш: неотслеживаемый
    • 4

      40011 кеш:когда

    • кеш:политика Окружающая среда
      • Среда: Имя
      • Окружающая среда: URL
      • Среда: ON_STOP
      • Среда: Действие
      • : AUTO_STOP_IN
    • .0012
    • environment:deployment_tier
    • Динамические среды
  • extends
  • image
    • image:name
    • image:entrypoint
    • image:pull_policy
  • наследовать
    • наследовать: по умолчанию
    • наследовать: переменные
  • прерываемый
  • нужен
    • Потребности: Артефакты
    • Потребности: Проект
    • Потребность: Трубопровод: Работа
    • Потребности: Опционально
    • . только /, за исключением
      • только: ссылка /, за исключением: ссылки
      • Только: переменные /, за исключением: переменные
      • : Изменения /99 / кроме:changes
      • только :kubernetes / кроме:kubernetes
    • страницы
    • параллельный
      • параллельный: матричный
    • выпуск
      • Выпуск: TAG_NAME
      • Выпуск: TAG_MESSAGE
      • Выпуск: Имя
      • Выпуск: Описание
      • Релиз: Ref .0004
      • выпуск:вехи
      • выпуск:released_at
      • выпуск:активы:ссылки
    • resource_group повторная попытка
      • повторная попытка: когда
    • правила
      • правила: если
      • правила:изменения
        • правила:изменения:пути
        • правила:изменения:сравнить_с
      • правила:существует
      • правила:allow_failure
      • правила:переменные
    • сценарий секреты
      • секреты:хранилище
      • секреты:файл
    • сервисы
      • сервис:pull_policy
    • этап
      • этап: . pre
      • этап: .post
    • теги
    • тайм-аут
    • Триггер
      • Триггер: включает
      • Триггер: Проект
      • Триггер: стратегия
      • Триггер: вперед
    • переменные
      • переменные:описание
    • когда
  • Устаревшие ключевые слова
    • глобально определенное Изображение , Сервисы , Cache , перед_SCRICT , AFT_SCRICT
  • 10 В этом документе перечислены варианты конфигурации для вашего GITLAB .GITLAB-CI.YML.

    • Для быстрого ознакомления с GitLab CI/CD следуйте краткому руководству.
    • Набор примеров см. в GitLab CI/CD Examples.
    • Для просмотра большого файла .gitlab-ci. yml , используемого на предприятии, см. .gitlab-ci.yml файл для gitlab .

    Когда вы редактируете файл .gitlab-ci.yml , вы можете проверить его с помощью Инструмент CI Lint.

    Если вы редактируете содержимое этой страницы, следуйте инструкциям по документированию ключевых слов.

    Ключевые слова

    Конфигурация конвейера GitLab CI/CD включает:

    • Глобальные ключевые слова, определяющие поведение конвейера:

      Ключевое слово Описание
      по умолчанию Пользовательские значения по умолчанию для ключевых слов задания.
      include Импорт конфигурации из других файлов YAML.
      этапы Названия и порядок этапов конвейера.
      переменные Определите переменные CI/CD для всех заданий в конвейере.
      рабочий процесс Управление типами конвейера.
    • Задания, сконфигурированные с ключевыми словами задания:

      Ключевое слово Описание
      after_script Переопределить набор команд, выполняемых после задания.
      allow_failure Разрешить сбой задания. Неудачное задание не приводит к сбою конвейера.
      артефакты Список файлов и каталогов, которые необходимо прикрепить к заданию в случае успеха.
      before_script Переопределить набор команд, которые выполняются перед заданием.
      кэш Список файлов, которые следует кэшировать между последующими запусками.
      покрытие Параметры покрытия кода для данного задания.
      dast_configuration Использовать конфигурацию из профилей DAST на уровне задания.
      зависимости Ограничьте, какие артефакты будут передаваться конкретному заданию, указав список заданий, из которых будут извлекаться артефакты.
      среда Имя среды, в которой развертывается задание.
      кроме Управление, когда задания не создаются.
      extends Записи конфигурации, от которых наследуется это задание.
      изображение Используйте образы Docker.
      наследовать Выберите, какие глобальные значения по умолчанию наследуют все задания.
      прерываемый Определяет, может ли задание быть отменено, если оно становится избыточным при новом запуске.
      потребности Выполнение работ до этапа заказа.
      только Управление созданием заданий.
      pages Загрузите результат задания для использования с GitLab Pages.
      параллельный Сколько экземпляров задания должно выполняться параллельно.
      выпуск Указывает бегуну создать объект выпуска.
      группа_ресурсов Ограничение одновременности заданий.
      повторная попытка Когда и сколько раз задание может быть автоматически повторено в случае сбоя.
      правила Список условий для оценки и определения выбранных атрибутов задания, а также того, создано оно или нет.
      сценарий Сценарий оболочки, который выполняется бегуном.
      секреты Секреты CI/CD необходимы для работы.
      services Используйте образы служб Docker.
      сцена Определяет этап задания.
      теги Список тегов, которые используются для выбора бегуна.
      время ожидания Определите пользовательское время ожидания на уровне задания, которое имеет приоритет над настройкой всего проекта.
      триггер Определяет триггер нисходящего конвейера.
      переменные Определите переменные задания на уровне задания.
      когда Когда запускать задание.

    Глобальные ключевые слова

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

    по умолчанию

    Для некоторых ключевых слов можно установить глобальные значения по умолчанию. Задания, не определяющие один или несколько перечисленных ключевых слов используют значение, определенное в разделе по умолчанию .

    Тип ключевого слова : Глобальное ключевое слово.

    Possible inputs : These keywords can have custom defaults:

    • after_script
    • artifacts
    • before_script
    • cache
    • image
    • interruptible
    • retry
    • службы
    • теги
    • тайм-аут

    Пример по умолчанию :

     по умолчанию:
      изображение: рубин: 3.0
    rspec:
      скрипт: пакет exec rspec
    рспец 2.7:
      изображение: рубин: 2,7
      скрипт: пакет exec rspec
     

    В этом примере ruby:3.0 — это значение image по умолчанию для всех заданий в конвейере. Задание rspec 2.7 не использует значение по умолчанию, поскольку оно переопределяет значение по умолчанию с помощью изображение для конкретного задания раздел:

    Дополнительные сведения :

    • При создании конвейера каждое значение по умолчанию копируется во все задания, не имеющие это ключевое слово определено.
    • Если для задания уже настроено одно из ключевых слов, конфигурация в задании имеет приоритет и не заменяется значением по умолчанию.
    • Управление наследованием ключевых слов по умолчанию в заданиях с помощью inherit:default .

    включает

    Перемещено в GitLab Free в версии 11.4.

    Используйте include для включения внешних файлов YAML в конфигурацию CI/CD. Вы можете разделить одну длинную .gitlab-ci.yml на несколько файлов для повышения удобочитаемости, или уменьшить дублирование одной и той же конфигурации в нескольких местах.

    Вы также можете хранить файлы шаблонов в центральном репозитории и включать их в проекты.

    включают файлы :

    • Объединены с файлами .gitlab-ci.yml .
    • Всегда сначала оценивается, а затем объединяется с содержимым файла .gitlab-ci.yml , независимо от положения включает ключевое слово .

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

    В GitLab 12.4 и более поздних версиях ограничение по времени для разрешения всех файлов составляет 30 секунд.

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входы : включают подразделов:

    • включают: локальные
    • включают: файл
    • Включите: Demote
    • Включите: Шаблон

    Дополнительные данные :

    • Используйте слияние, чтобы настраивать и переопределить конфигурации CI/CD с локальной
    • . название задания или глобальное ключевое слово в файле .gitlab-ci.yml . Две конфигурации объединяются вместе, и конфигурация в файле .gitlab-ci.yml имеет приоритет над включенной конфигурацией.
    • Если вы повторно запустите:
      • Задание, include файлы не загружаются снова. Все задания в конвейере используют конфигурацию извлекается при создании конвейера. Любые изменения исходного кода включают файлов. не влияют на повторные запуски заданий.
      • Pipeline, включают файлов, которые снова загружаются. Если они изменились после последней запуск конвейера, новый конвейер использует измененную конфигурацию.

    Похожие темы :

    • Используйте переменные с , включая .
    • Используйте правила с , включая .
    включает: местный

    Используйте include:local , чтобы включить файл, который находится в том же репозитории, что и файл . gitlab-ci.yml . Используйте include:local вместо символических ссылок.

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входные данные :

    Полный путь относительно корневого каталога ( / ):

    • Файл YAML должен иметь расширение .yml или .yaml .
    • Вы можете использовать подстановочные знаки * и ** в пути к файлу.
    • Вы можете использовать определенные переменные CI/CD.

    Пример включает: местный :

     включает:
      - локальный: '/templates/.gitlab-ci-template.yml'
     

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

     include: '.gitlab-ci-production.yml'
     

    Дополнительные сведения :

    • Файл .gitlab-ci.yml и локальный файл должны находиться в одной ветке.
    • Вы не можете включать локальные файлы через пути подмодулей Git.
    • Все вложенные включения выполняются в рамках одного и того же проекта, поэтому вы можете использовать локальные, проектные, удаленные или шаблонные включения.
    включает: файл

    Включая несколько файлов из одного проекта, представленного в GitLab 13.6. Флаг функции удален в GitLab 13.8.

    Чтобы включить файлы из другого частного проекта в тот же экземпляр GitLab, используйте include:file . Вы можете использовать include:file в сочетании с include:project только.

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входные данные :

    Полный путь относительно корневого каталога ( / ):

    • Файл YAML должен иметь расширение .yml или .yaml .yaml
    • Вы можете использовать определенные переменные CI/CD.

    Пример include:file :

     include:
      - проект: 'моя группа/мой проект'
        файл: '/templates/.gitlab-ci-template.yml'
     

    Вы также можете указать ref . Если вы не укажете значение, ссылка по умолчанию будет равна HEAD проекта:

     включает:
      - проект: 'моя группа/мой проект'
        ссылка: основной
        файл: '/templates/.gitlab-ci-template.yml'
      - проект: 'моя группа/мой проект'
        ссылка: v1.0.0 # Тег Git
        файл: '/templates/.gitlab-ci-template.yml'
      - проект: 'моя группа/мой проект'
        ссылка: 787123b47f14b552955ca2786bc9542ae66fee5b # Git SHA
        файл: '/templates/.gitlab-ci-template.yml'
     

    Вы можете включить несколько файлов из одного проекта:

     включает:
      - проект: 'моя группа/мой проект'
        ссылка: основной
        файл:
          - '/templates/.builds.yml'
          - '/templates/.tests.yml'
     

    Дополнительные сведения :

    • Все вложенные включения выполняются в рамках целевого проекта. Можно использовать локальный (относительно целевого проекта), проект , удаленный или шаблон включает.
    • При запуске конвейера оценивается конфигурация файла .gitlab-ci.yml , включенная всеми методами. Конфигурация представляет собой снимок во времени и сохраняется в базе данных. GitLab не отражает никаких изменений в указанную конфигурацию файла .gitlab-ci.yml до запуска следующего конвейера.
    • При включении файла YAML из другого частного проекта пользователь, запускающий конвейер должен быть участником обоих проектов и иметь соответствующие разрешения для запуска конвейеров. А не найден или доступ запрещен. Ошибка может отображаться, если у пользователя нет доступа ни к одному из включенных файлов.
    включает: удаленный

    Используйте include:remote с полным URL-адресом, чтобы включить файл из другого места.

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входные данные :

    Общедоступный URL-адрес, доступный по запросу HTTP/HTTPS GET :

    • Аутентификация с удаленным URL-адресом не поддерживается.
    • Файл YAML должен иметь расширение .yml или .yaml .
    • Вы можете использовать определенные переменные CI/CD.

    Пример включает: удаленный :

     включает:
      - удаленный: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
     

    Дополнительные сведения :

    • Все вложенные включения выполняются без контекста в качестве общедоступного пользователя, поэтому вы можете включать только общедоступные проекты или шаблоны.
    • Будьте осторожны при включении удаленного файла конфигурации CI/CD. Никаких конвейеров или уведомлений срабатывает при изменении внешних файлов конфигурации CI/CD. С точки зрения безопасности, это похоже на получение сторонней зависимости.
    включает: шаблон

    Используйте include:template для включения шаблонов .gitlab-ci.yml .

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входы :

    Шаблон CI/CD:

    • Шаблоны хранятся в lib/gitlab/ci/templates . Не все шаблоны предназначены для использования с include:template , поэтому проверьте шаблон комментарии перед использованием.
    • Вы можете использовать определенные переменные CI/CD.

    Пример include:template :

     # Файл получен из коллекции шаблонов GitLab
    включают:
      - шаблон: Auto-DevOps.gitlab-ci.yml
     

    Несколько include:template файлы:

     включает:
      - шаблон: Android-Fastlane.gitlab-ci.yml
      - шаблон: Auto-DevOps.gitlab-ci.yml
     

    Дополнительные сведения :

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

    этапов

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

    Если стадий не определен в файле .Gitlab-Ci.yml .

  • .post
  • Порядок элементов в этапах определяет порядок выполнения заданий:

    • Задания на одном этапе выполняются параллельно.
    • Задания следующего этапа запускаются после успешного завершения заданий предыдущего этапа.

    Если конвейер содержит только задания на этапах .pre или .post , он не запускается. На другом этапе должна быть хотя бы одна другая работа. .до и .после этапов может использоваться в требуемой конфигурации конвейера для определения заданий соответствия, которые должны выполняться до или после заданий конвейера проекта.

    Тип ключевого слова : Глобальное ключевое слово.

    Пример ступеней :

     ступеней:
      - строить
      - тест
      - развертывать
     

    В этом примере:

    1. Все задания в сборке выполняются параллельно.
    2. Если все задания в сборке выполнены успешно, задания test выполняются параллельно.
    3. Если все задания в test завершаются успешно, задания deploy выполняются параллельно.
    4. Если все задания в развертывании выполнены успешно, конвейер помечается как переданный .

    В случае сбоя какого-либо задания конвейер помечается как failed , а задания на более поздних этапах не выполняются. Начало. Задания на текущем этапе не останавливаются и продолжают выполняться.

    Дополнительные сведения :

    • Если в задании не указан этап , заданию назначается этап test .
    • Если этап определен, но ни одно задание не использует его, этап не отображается в конвейере, которые могут помочь конфигурациям конвейера соответствия:
      • Этапы можно определить в конфигурации соответствия, но они остаются скрытыми, если не используются.
      • Определенные этапы становятся видимыми, когда разработчики используют их в определениях заданий.

    Связанные темы :

    • Чтобы запустить задание раньше и игнорировать порядок этапов, используйте ключевое слово need .

    рабочий процесс

    Представлено в GitLab 12.5

    Используйте рабочий процесс для управления поведением конвейера.

    Связанные темы :

    • рабочий процесс: правила примеры
    • Переключение между ответвленными конвейерами и конвейерами мерж-реквестов
    Рабочий процесс
    : правила

    Ключевое слово rules в рабочем процессе аналогично правилам , определенным в заданиях, но контролирует, будет ли создан весь конвейер.

    Если ни одно из правил не оценивается как истинное, конвейер не запускается.

    Возможные входные данные : Вы можете использовать некоторые из тех же ключевых слов, что и правила уровня задания :

    • Правила : если .
    • правила: изменения .
    • правил: существует .
    • вместо может быть только всегда или никогда не при использовании с рабочим процессом .
    • переменных .

    Пример рабочего процесса : правила :

     рабочего процесса:
      правила:
        - если: $CI_COMMIT_TITLE =~ /-черновик$/
          когда: никогда
        - если: $CI_PIPELINE_SOURCE == "merge_request_event"
        - если: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
     

    В этом примере конвейеры запускаются, если заголовок фиксации (первая строка сообщения фиксации) не заканчивается на -черновик и конвейер для:

    • Мерж-реквест
    • Ветка по умолчанию.

    Дополнительные сведения :

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

    Связанные темы :

    • Вы можете использовать шаблоны workflow:rules для импорта предварительно настроенный рабочий процесс : правила 9запись 0012.
    • Общие пункты if для рабочего процесса : правила .
    • Используйте правила для запуска конвейеров мерж-реквестов.
    рабочий процесс: правила: переменные

    История версий

    • Представлено в GitLab 13.11.
    • Флаг функции удален в GitLab 14.1.

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

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

    Тип ключевого слова : Глобальное ключевое слово.

    Возможные входные данные : Пары имени и значения переменной:

    • Имя может использовать только цифры, буквы и знаки подчеркивания ( _ ).
    • Значение должно быть строкой.

    Пример рабочий процесс:правила:переменные :

     переменные:
      DEPLOY_VARIABLE: «развертывание по умолчанию»
    рабочий процесс:
      правила:
        - если: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
          переменные:
            DEPLOY_VARIABLE: "deploy-production" # Переопределить глобально определенную DEPLOY_VARIABLE
        - если: $CI_COMMIT_REF_NAME =~ /feature/
          переменные:
            IS_A_FEATURE: "true" # Определить новую переменную. 
        - when: всегда # Запускать конвейер в остальных случаях
    задание1:
      переменные:
        DEPLOY_VARIABLE: "задание1-развертывание по умолчанию"
      правила:
        - если: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
          переменные: # Переопределить DEPLOY_VARIABLE определено
            DEPLOY_VARIABLE: "job1-deploy-production" # на уровне задания.
        - when: on_success # Запускать задание в остальных случаях
      сценарий:
        - echo "Запустить скрипт с $DEPLOY_VARIABLE в качестве аргумента"
        - echo "Запустить другой скрипт, если $IS_A_FEATURE существует"
    задание2:
      сценарий:
        - echo "Запустить скрипт с $DEPLOY_VARIABLE в качестве аргумента"
        - echo "Запустить другой скрипт, если $IS_A_FEATURE существует"
     

    Если ветка является веткой по умолчанию:

    • job1’s DEPLOY_VARIABLE равно job1-deploy-production .
    • job2 DEPLOY_VARIABLE — это deploy-production .

    Когда ветвь feature :

    • job1 DEPLOY_VARIABLE равно job1-default-deploy , а IS_A_FEATURE true .
    • job2 DEPLOY_VARIABLE равно default-deploy и IS_A_FEATURE равно true .

    Когда ветвь является чем-то другим:

    • job1’s DEPLOY_VARIABLE равно job1-default-deploy .
    • job2 DEPLOY_VARIABLE равно default-deploy .

    Ключевые слова работы

    В следующих разделах объясняется, как использовать ключевые слова для настройки конвейеров CI/CD.

    после_скрипта

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

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

    Возможные входные данные : Массив, включающий:

    • Однострочные команды.
    • Длинные команды разбиты на несколько строк.
    • Якоря YAML.

    Поддерживаются переменные CI/CD.

    Пример after_script :

     задание:
      сценарий:
        - echo "Пример раздела скрипта."
      после_скрипта:
        - echo "Выполните эту команду после завершения раздела `script`."
     

    Дополнительные сведения :

    Сценарии, которые вы указываете в after_script , выполняются в новой оболочке, отдельно от любой before_script или script команды. В результате они:

    • Возвращают текущий рабочий каталог к ​​значению по умолчанию (в соответствии с переменными, которые определяют, как бегун обрабатывает запросы Git).
    • Нет доступа к изменениям, выполненным командами, определенными в сценарии before_script или , включая:
      • Псевдонимы команд и переменные, экспортированные в сценарии сценариев.
      • Изменения вне рабочего дерева (в зависимости от исполнителя раннера), например программное обеспечение, установленное сценарием before_script или script .
    • Есть отдельный тайм-аут, жестко заданный на 5 минут.
    • Не влияйте на код выхода задания. Если script раздел завершается успешно, и after_script время ожидания или сбой, задание завершается с кодом 0 ( Задание выполнено успешно ).

    Если время ожидания задания истекло или оно было отменено, команды after_script не выполняются. Существует проблема, связанная с добавлением поддержки выполнения команд after_script для заданий с истекшим временем ожидания или отмененных.

    Похожие темы :

    • Используйте after_script с по умолчанию чтобы определить набор команд по умолчанию, которые должны выполняться после всех заданий.
    • Вы можете игнорировать ненулевые коды выхода.
    • Используйте цветовые коды с after_script для облегчения просмотра журналов заданий.
    • Создание настраиваемых складных разделов для упрощения вывода журнала заданий.

    разрешить_сбой

    Используйте allow_failure , чтобы определить, должен ли конвейер продолжать работу в случае сбоя задания.

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

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

    Это же предупреждение отображается, когда:

    • Все остальные задания на этапе выполнены успешно.
    • Все остальные задания в конвейере выполнены успешно.

    Значение по умолчанию для allow_failure :

    • true для ручных работ.
    • false для заданий, использующих , когда: вручную внутри правил .
    • ложь во всех остальных случаях.

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

    Возможные входы :

    • истина или ложь .

    Пример allow_failure :

     job1:
      этап: тест
      сценарий:
        - выполнить_скрипт_1
    задание2:
      этап: тест
      сценарий:
        - выполнить_скрипт_2
      allow_failure: правда
    задание3:
      этап: развертывание
      сценарий:
        - развертывание_в_постановке
      среда: постановка
     

    В этом примере задание 1 и задание 2 выполняются параллельно:

    • Если задание2 завершается сбоем, задания на этапе развертывания все еще могут запускаться.

    Дополнительные сведения :

    • Вы можете использовать allow_failure в качестве подраздела правил .
    • Вы можете использовать allow_failure: false с ручным заданием, чтобы создать блокирующее ручное задание. Заблокированный конвейер не запускает никаких заданий на более поздних этапах до тех пор, пока не будет выполнено ручное задание. запускается и успешно завершается.
    allow_failure:exit_codes

    История версий

    • Представлено в GitLab 13.8.
    • Флаг функции удален в GitLab 13.9.

    Используйте allow_failure:exit_codes , чтобы контролировать, когда задание должно быть позволено потерпеть неудачу. Задание allow_failure: true для любого из перечисленных кодов выхода, и allow_failure false для любого другого кода выхода.

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

    Возможные входы :

    • Один код выхода.
    • Массив кодов выхода.

    Пример allow_failure :

     test_job_1:
      сценарий:
        - echo "Запустите сценарий, который приведет к коду выхода 1. Это задание не выполнено."
        - выход 1
      разрешить_сбой:
        выход_коды: 137
    test_job_2:
      сценарий:
        - echo "Запустите сценарий, который приведет к коду выхода 137. Это задание может завершиться ошибкой."
        - выход 137
      разрешить_сбой:
        выход_коды:
          - 137
          - 255
     

    артефактов

    Используйте артефакты , чтобы указать, какие файлы следует сохранять в качестве артефактов задания. Артефакты задания — это список файлов и каталогов, которые привязан к заданию, когда оно успешно, неудачно или всегда.

    Артефакты отправляются в GitLab после завершения задания. Они есть доступен для загрузки в пользовательском интерфейсе GitLab, если размер меньше, чем максимальный размер артефакта.

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

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

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

    Подробнее об артефактах.

    артефакты:пути

    Пути относятся к каталогу проекта ( $CI_PROJECT_DIR ) и не могут напрямую ссылка вне его.

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

    Возможные входные данные :

    • Массив путей к файлам относительно каталога проекта.
    • Вы можете использовать подстановочные знаки, которые используют glob узоры и:
      • В GitLab Runner 13. 0 и более поздних версиях двойная звезда.Глоб .
      • В GitLab Runner 12.10 и более ранних версиях filepath.Match .

    Пример артефактов: пути :

     задание:
      артефакты:
        пути:
          - двоичные файлы/
          - .конфиг
     

    В этом примере создается артефакт с .config и всеми файлами в каталоге двоичных файлов .

    Дополнительные сведения :

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

    Связанные темы :

    • Чтобы ограничить задания, из которых конкретное задание извлекает артефакты, см. зависимости .
    • Создание артефактов работы.
    Артефакты
    : исключить

    История версий

    • Представлено в GitLab 13. 1
    • Требуется GitLab Runner 13.1

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

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

    Возможные входные данные :

    • Массив путей к файлам относительно каталога проекта.
    • Вы можете использовать подстановочные знаки, которые используют glob или шаблонов doublestar.PathMatch .

    Пример артефактов: исключить :

     артефактов:
      пути:
        - двоичные файлы/
      исключать:
        - двоичные файлы /**/*.o
     

    В этом примере все файлы хранятся в двоичных файлов/ , но не *.o файлов, расположенных в подкаталоги двоичных файлов/ .

    Дополнительные детали :

    • Артефакты :исключить пути не ищутся рекурсивно.
    • Файлы, соответствующие артефактам: неотслеживаемые , могут быть исключены с помощью Артефакты : исключить тоже.

    Похожие темы :

    • Исключите файлы из артефактов задания.
    артефактов:expire_in

    История версий

    • Представленные в GitLab 13.0 за флагом отключенной функции, последние артефакты заданий сохраняются независимо от времени истечения срока действия.
    • Сделано поведение по умолчанию в GitLab 13.4.
    • Представленное в GitLab 13.8 сохранение последних артефактов задания можно отключить на уровне проекта.
    • Представленное в GitLab 13.9 сохранение последних артефактов задания можно отключить для всего экземпляра.
    • Представленные в GitLab 13.12, последние артефакты пайплайна сохраняются независимо от срока действия.

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

    • Артефакты из последнего задания, за исключением случаев, когда сохранение артефактов последнего задания:
      • Отключено на уровне проекта.
      • Отключено для всего экземпляра.
    • Артефакты конвейера. Вы не можете указать срок годности для артефакты конвейера. См. раздел Когда артефакты конвейера удаляются Чтобы получить больше информации.

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

    Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

    Возможные входные данные : Срок действия. Если единица измерения не указана, время указывается в секундах. Допустимые значения включают:

    • '42'
    • 42 секунды
    • 3 минуты 4 секунды
    • 2 часа 20 мин
    • 2H30MIN
    • 6 MOS 1 Day
    • 47 лет 6 MOS и 4D
    • 3 недель и 2 дня 12 11111111111111111111111111111111111111111. НЕДВИЖИМОСТИ И НЕТ Пример артефактов:expire_in :

       задание:
        артефакты:
          expire_in: 1 неделя
       

      Дополнительные сведения :

      • Период истечения срока действия начинается с момента загрузки артефакта и его сохранения в GitLab. Если время истечения срока действия не определено, по умолчанию используется настройка для всего экземпляра.
      • Чтобы переопределить дату истечения срока действия и защитить артефакты от автоматического удаления:
        • Выберите Оставить на странице задания.
        • В GitLab 13.3 и более поздних версиях установите значение expire_in до никогда .
      артефакты: expose_as

      Представлено в GitLab 12.5.

      Используйте ключевое слово артефакты: expose_as для отображать артефакты работы в пользовательском интерфейсе мерж-реквеста.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные :

      • Имя для ссылки на загрузку артефактов, отображаемое в пользовательском интерфейсе запроса на слияние. Должен сочетаться с артефактами :пути .

      Пример артефактов: expose_as :

       тест:
        скрипт: ["эхо 'тест' > файл.txt"]
        артефакты:
          expose_as: 'артефакт 1'
          пути: ['file.txt']
       

      Дополнительные сведения :

      • Если артефакты: пути используют переменные CI/CD, артефакты не отображаются в пользовательском интерфейсе.
      • В одном запросе на слияние может быть представлено не более 10 артефактов задания.
      • Шаблоны шаблонов не поддерживаются.
      • Если указан каталог и в нем находится более одного файла, ссылка на браузер артефактов работы.
      • Если GitLab Pages включен, GitLab автоматически отображает артефакты, когда артефакты представляют собой один файл с одним из следующих расширений:
        • . html или .htm
        • .TXT
        • .JSON
        • .XML
        • .LOG
      10 Связанные темы :

      • . Выставляйте артефакты задания в пользовательском интерфейсе мерж-реквеста.

      Артефакты
      :название

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

      Если не указано, имя по умолчанию — артефакты , которое при загрузке становится артефактов.zip .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • Имя архива артефактов. Поддерживаются переменные CI/CD. Должен сочетаться с артефактами :пути .

      Пример артефактов:имя :

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

       задание:
        артефакты:
          имя: "job1-файл-артефактов"
          пути:
            - двоичные файлы/
       

      Похожие темы :

      • Используйте переменные CI/CD для определения имени артефакта.
      артефакты: общедоступные

      История версий

      • Представлен в GitLab 13.8
      • Он развернут за флагом функции, отключенным по умолчанию.
      • Он отключен на GitLab.com.
      • Рекомендуется для промышленного использования.

      В GitLab с самостоятельным управлением по умолчанию эта функция недоступна. Чтобы сделать его доступным, попросите администратора включить флаг функции с именем non_public_artifacts . На GitLab.com эта функция недоступна.

      Используйте артефакты: общедоступные , чтобы определить, должны ли артефакты задания общедоступны.

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

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

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

      Возможные входы :

      • true (по умолчанию, если не определено) или false .

      Пример артефактов: общедоступный :

       работа:
        артефакты:
          публичный: ложь
       
      артефакты:отчеты

      Использовать артефакты : отчеты для сбора артефактов, созданных включены шаблоны в задания.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • См. список доступных типов отчетов об артефактах.

      Пример артефактов: отчеты :

       спецификация:
        этап: тест
        сценарий:
          - пакетная установка
          - rspec --format RspecJunitFormatter --out rspec.xml
        артефакты:
          отчеты:
            соединение: rspec.xml
       

      Дополнительные сведения :

      • Объединение отчетов в родительских конвейерах с использованием артефактов из дочерних конвейеров не поддерживается. Отслеживайте прогресс добавления поддержки в этом выпуске.
      • Чтобы иметь возможность просматривать выходные файлы отчета, включите ключевое слово артефакты:пути . Обратите внимание, что это загрузит и сохранит артефакт дважды.
      • Отчеты о тестировании собираются независимо от результатов задания (успешно или неудачно). Вы можете использовать артефакты :expire_in для установки срока действия дата отчетов об артефактах.
      артефакты: неотслеживаемые

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • true или false (по умолчанию, если не определено).

      Пример артефактов: неотслеживаемые :

      Сохранить все неотслеживаемые файлы Git:

       задание:
        артефакты:
          неотслеживаемый: правда
       

      Похожие темы :

      • Добавляйте неотслеживаемые файлы в артефакты.
      артефакты:когда

      Использовать артефакты : когда для загрузки артефактов при сбое задания или несмотря на отказ.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • on_success (по умолчанию): загружать артефакты только после успешного выполнения задания.
      • on_failure : Загружать артефакты только в случае сбоя задания.
      • всегда : Всегда загружать артефакты (за исключением случаев, когда время ожидания истекло). Например, когда загрузка артефактов требуется для устранения неполадок с провалившимися тестами.

      Пример артефактов: когда :

       задание:
        артефакты:
          когда: on_failure
       

      перед_сценарием

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные : Массив, включающий:

      • Однострочные команды.
      • Длинные команды разбиты на несколько строк.
      • Якоря YAML.

      Поддерживаются переменные CI/CD.

      Пример before_script :

       задание:
        до_скрипта:
          - echo "Выполняйте эту команду перед любыми командами 'script:'."
        сценарий:
          - echo "Эта команда выполняется после команд задания 'before_script'."
       

      Дополнительные сведения :

      • Сценарии, указанные в before_script , объединяются с любыми указанными вами сценариями. в основном скрипте . Объединенные сценарии выполняются вместе в одной оболочке.
      • Использование before_script на верхнем уровне, но не на раздел по умолчанию , устарел.

      Похожие темы :

      • Используйте before_script с по умолчанию чтобы определить набор команд по умолчанию, которые должны выполняться перед командами сценария во всех заданиях.
      • Вы можете игнорировать ненулевые коды выхода.
      • Используйте цветовые коды с before_script для облегчения просмотра журналов заданий.
      • Создание настраиваемых складных разделов для упрощения вывода журнала заданий.

      кэш

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

      Кэширование совместно используется конвейерами и заданиями. Кэши восстанавливаются раньше артефактов.

      Узнайте больше о кэшах в разделе Кэширование в GitLab CI/CD.

      кэш: пути

      Используйте ключевое слово cache:paths , чтобы выбрать файлы или каталоги для кэширования.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные :

      • Массив путей относительно каталога проекта ( $CI_PROJECT_DIR ). Вы можете использовать подстановочные знаки, которые используют glob узоры:
        • В GitLab Runner 13.0 и более поздних версиях двойная звезда.Глоб .
        • В GitLab Runner 12.10 и более ранних версиях путь к файлу.Соответствует .

      Пример cache:paths :

      Кэшировать все файлы в двоичных файлах , которые заканчиваются на .apk и файл .config :

       rspec
        сценарий:
          - echo "Это задание использует кеш. "
        кеш:
          ключ: бинарные файлы-кэш
          пути:
            - бинарники/*.apk
            - .конфиг
       

      Связанные темы :

      • Дополнительные сведения см. в общих примерах использования кэша . cache:paths примеров.
      Кэш
      :ключ

      Используйте ключевое слово cache:key , чтобы присвоить каждому кэшу уникальный идентификационный ключ. Все вакансии которые используют один и тот же ключ кэша, используют один и тот же кэш, в том числе в разных конвейерах.

      Если не задано, по умолчанию используется ключ по умолчанию . Все задания с ключевым словом cache , но нет кэша : ключ совместно использует кэш по умолчанию .

      Должен использоваться с кешем : путь , иначе ничего не кэшируется.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • Строка.
      • Предопределенная переменная CI/CD.
      • Комбинация обоих.

      Пример cache:key :

       cache-job:
        сценарий:
          - echo "Это задание использует кеш."
        кеш:
          ключ: бинарные-кэш-$CI_COMMIT_REF_SLUG
          пути:
            - двоичные файлы/
       

      Дополнительные сведения :

      Связанные темы :

      • Вы можете указать резервный ключ кэша использовать, если указанный кэш : ключ не найден.
      • В одном задании можно использовать несколько ключей кэша.
      • Дополнительные сведения см. в общих примерах использования кэша . Кэш : примеры ключей .
      кэш:ключ:файлы

      Представлено в GitLab 12.5.

      Используйте ключевое слово cache:key:files для создания нового ключа, когда один или два определенных файла сдача. cache:key:files позволяет повторно использовать некоторые кэши и реже их перестраивать, что ускоряет последующие запуски конвейера.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные :

      • Массив из одного или двух путей к файлам.

      Пример cache:key:files :

       cache-job:
        сценарий:
          - echo "Это задание использует кеш."
        кеш:
          ключ:
            файлы:
              - Gemfile.lock
              - пакет.json
          пути:
            - продавец/рубин
            - node_modules
       

      В этом примере создается кэш для зависимостей Ruby и Node.js. Кэш привязан к текущим версиям файлов Gemfile.lock и package.json . Когда один из эти файлы изменяются, вычисляется новый ключ кэша и создается новый кэш. Любое будущее запуски заданий, использующие один и тот же Gemfile. lock и package.json с cache:key:files используйте новый кеш вместо перестроения зависимостей.

      Дополнительная информация :

      • Ключ кэша — это SHA, вычисленный на основе самых последних коммитов. который изменил каждый из перечисленных файлов. Если ни один из файлов не был изменен ни при каких коммитах, резервным ключом будет по умолчанию .
      кэш: ключ: префикс

      Представлено в GitLab 12.5.

      Используйте cache:key:prefix для объединения префикса с SHA, вычисленным для cache:key:files .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • Строка
      • Предопределенные переменные
      • Комбинация обоих.

      Пример cache:key:prefix :

       rspec:
        сценарий:
          - echo "Это задание rspec использует кеш. "
        кеш:
          ключ:
            файлы:
              - Gemfile.lock
            префикс: $CI_JOB_NAME
          пути:
            - продавец/рубин
       

      Например, добавление префикса к $CI_JOB_NAME приводит к тому, что ключ выглядит как rspec-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5 . Если ветка изменяет Gemfile.lock , эта ветка имеет новую контрольную сумму SHA для cache:key:files . Генерируется новый ключ кэша, и для этого ключа создается новый кэш. Если Gemfile.lock не найден, к добавляется префикс default , поэтому ключ в примере будет rspec-default .

      Дополнительные детали :

      • Если ни один файл в cache:key:files не изменяется ни в одной фиксации, к ключу по умолчанию добавляется префикс.
      Кэш
      : неотслеживаемый

      Используйте untracked: true для кэширования всех неотслеживаемых файлов в вашем репозитории Git:

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

      Возможные входы :

      • правда или ложь (по умолчанию).

      Пример cache:untracked :

       rspec:
        сценарий: тест
        кеш:
          неотслеживаемый: правда
       

      Дополнительные детали :

      Кэш
      : когда

      Представлен в GitLab 13.5 и GitLab Runner v13.5.0.

      Использовать кэш :когда для определения времени сохранения кэша в зависимости от состояния задания.

      Должен использоваться с кешем : путь , иначе ничего не кэшируется.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • on_success (по умолчанию): Сохранять кеш только после успешного выполнения задания.
      • on_failure : Сохранять кеш только в случае сбоя задания.
      • всегда : Всегда сохранять кеш.

      Пример кэша : когда :

       rspec:
        сценарий: rspec
        кеш:
          пути:
            - рспец/
          когда: «всегда»
       

      В этом примере кэш сохраняется независимо от того, завершается ли задание неудачно или успешно.

      кэш: политика

      Чтобы изменить поведение загрузки и загрузки кэша, используйте ключевое слово cache:policy . По умолчанию задание загружает кэш при запуске задания и отправляет изменения в кеш после завершения задания. Этот стиль кэширования — политика pull-push (по умолчанию).

      Чтобы настроить задание на загрузку кэша только при запуске задания, но никогда не загружать изменения когда работа закончится, используйте кеш:политика:тянуть .

      Чтобы настроить задание на загрузку кэша только после завершения задания, но никогда не загружать cache при запуске задания используйте cache:policy:push .

      Используйте политику pull , если у вас параллельно выполняется много заданий, использующих один и тот же кэш. Эта политика ускоряет выполнение заданий и снижает нагрузку на сервер кэширования. Вы можете используйте задание с политикой push для создания кэша.

      Должен использоваться с кэшем : путь или ничего не кэшируется.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • тянуть
      • толкать
      • pull-push (по умолчанию)

      Пример cache:policy :

       prepare-dependencies-job:
        этап: сборка
        кеш:
          ключ: драгоценные камни
          пути:
            - продавец/комплект
          политика: нажать
        сценарий:
          - echo "Это задание только загружает зависимости и создает кеш. "
          - echo "Загрузка зависимостей..."
      более быстрая тестовая работа:
        этап: тест
        кеш:
          ключ: драгоценные камни
          пути:
            - продавец/комплект
          политика: тянуть
        сценарий:
          - echo "Этот сценарий задания использует кеш, но не обновляет его."
          - echo "Выполнение тестов..."
       

      покрытие

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

      Чтобы извлечь значение покрытия кода из совпадения, GitLab использует это меньшее регулярное выражение: \d+(\.\d+)? .

      Возможные входные данные :

      • Регулярное выражение. Должен начинаться и заканчиваться на /. Должен совпадать с номером покрытия. Также может соответствовать окружающему тексту, поэтому вам не нужно использовать группу символов регулярного выражения. чтобы зафиксировать точное число.

      Пример покрытия :

       job1:
        сценарий: rspec
        покрытие: '/Покрытие кода: \d+\.\d+/'
       

      В этом примере:

      1. GitLab проверяет журнал заданий на соответствие регулярному выражению. Линия как Покрытие кода: 67,89% строк, покрытых , совпадут.
      2. Затем GitLab проверяет совпадающий фрагмент, чтобы найти совпадение с \d+(\.\d+)? . Примерная строка соответствия выше дает покрытие кода 67,89 .

      Дополнительные сведения :

      • Если в выходных данных задания имеется более одной совпадающей строки, используется последняя строка. (первый результат обратного поиска).
      • Если в одной строке несколько совпадений, ищется последнее совпадение для номера покрытия.
      • Если в совпадающем фрагменте найдено несколько номеров покрытия, используется первый номер.
      • Начальные нули удаляются.
      • Выход покрытия из дочерних конвейеров не записывается и не отображается. Проверьте связанную проблему Больше подробностей.

      dast_configuration

      Представлено в GitLab 14.1.

      Используйте ключевое слово dast_configuration , чтобы указать профиль сайта и профиль сканера, которые будут использоваться в Конфигурация CI/CD. Оба профиля должны быть предварительно созданы в проекте. Этап работы должен быть дат .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать только как часть работы.

      Возможные входы : По одному из site_profile и scan_profile .

      • Используйте site_profile , чтобы указать профиль сайта, который будет использоваться в задании.
      • Используйте профиль_сканера , чтобы указать профиль сканера, который будет использоваться в задании.

      Пример dast_configuration :

       этапов:
        - строить
        - даст
      включают:
        - шаблон: DAST. gitlab-ci.yml
      даст:
        dast_configuration:
          site_profile: "Пример компании"
          Scanner_profile: "Быстрый пассивный тест"
       

      В этом примере задание dast расширяет конфигурацию dast , добавленную с помощью ключевого слова include . для выбора определенного профиля сайта и профиля сканера.

      Дополнительные сведения :

      • Настройки, содержащиеся либо в профиле сайта, либо в профиле сканера, имеют приоритет над содержится в шаблоне DAST.

      Похожие темы :

      • Профиль сайта.
      • Профиль сканера.

      зависимости

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

      Если вы не используете зависимости , все артефакты с предыдущих этапов передаются в каждое задание.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Имена заданий, из которых нужно получить артефакты.
      • Пустой массив ( [] ), чтобы задание не загружало никаких артефактов.

      Пример зависимостей :

       build osx:
        этап: сборка
        сценарий: сделать сборку: osx
        артефакты:
          пути:
            - двоичные файлы/
      собрать линукс:
        этап: сборка
        скрипт: make build:linux
        артефакты:
          пути:
            - двоичные файлы/
      тестовый osx:
        этап: тест
        сценарий: сделать тест: osx
        зависимости:
          - собрать ОСХ
      тестовый линукс:
        этап: тест
        сценарий: сделать тест: Linux
        зависимости:
          - собрать линукс
      развертывать:
        этап: развертывание
        скрипт: сделать деплой
        среда: производство
       

      В этом примере у двух заданий есть артефакты: build osx и build linux . Когда выполняется test osx , артефакты из сборки OSX загружаются и извлекаются в контексте сборки. То же самое происходит для test linux и артефактов из build linux .

      Задание развертывания загружает артефакты из всех предыдущих заданий из-за приоритет этапа.

      Дополнительная информация :

      • Статус задания не имеет значения. Если задание завершается сбоем или это ручное задание, которое не запускается, ошибка не возникает.
      • Если артефакты зависимого задания просрочены или удаляется, то задание не выполняется.

      окружающая среда

      Используйте среду для определения среды, в которой развертывается задание.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Имя среды, в которой развертывается задание, в одном из этих форматы:

      • Простой текст, включая буквы, цифры, пробелы и следующие символы: , _ , /, $ , { , } .
      • Переменные CI/CD, включая предопределенные, проектные, групповые, экземплярные или переменные, определенные в Файл .gitlab-ci.yml . Вы не можете использовать переменные, определенные в разделе скрипта .

      Пример среды :

       развертывание в рабочей среде:
        этап: развертывание
        скрипт: git push production HEAD:main
        среда: производство
       

      Дополнительные сведения :

      • Если вы укажете среду , а среда с таким именем не существует, среда созданный.
      среда: имя

      Установите имя для среды.

      Общие имена сред: qa , staging и production , но вы можете использовать любое имя.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Имя среды, в которой развертывается задание, в одном из следующих форматы:

      • Простой текст, включая буквы, цифры, пробелы и следующие символы: - , _ , / , $ , { , } . 9001
      • переменные CI/CD, включая предопределенные, проект, группу, экземпляр или переменные, определенные в Файл .gitlab-ci.yml . Вы не можете использовать переменные, определенные в скрипте 9раздел 0012.

      Пример environment:name :

       развертывание в рабочей среде:
        этап: развертывание
        скрипт: git push production HEAD:main
        Окружающая среда:
          Название: производство
       
      среда: URL-адрес

      Установите URL-адрес для среды.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Один URL-адрес в одном из следующих форматов:

      • Простой текст, например https://prod.example.com .
      • переменные CI/CD, включая предопределенные, проект, группу, экземпляр или переменные, определенные в Файл .gitlab-ci.yml . Вы не можете использовать переменные, определенные в разделе скрипта .

      Пример среды : URL-адрес :

       развертывания в рабочей среде:
        этап: развертывание
        скрипт: git push production HEAD:main
        Окружающая среда:
          Название: производство
          URL-адрес: https://prod.example.com
       

      Дополнительные сведения :

      • После завершения задания вы можете получить доступ к URL-адресу, нажав кнопку в запросе на слияние, среды или страницы развертывания.
      среда: on_stop

      Закрытие (остановка) среды может быть достигнуто с помощью ключевого слова on_stop определено в среде . Он объявляет другое задание, которое запускается, чтобы закрыть Окружающая среда.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Дополнительные сведения :

      • Дополнительные сведения и пример см. в разделе environment:action .
      среда:действие

      Используйте ключевое слово action , чтобы указать, как задание взаимодействует со средой.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы : Одно из следующих ключевых слов:

      Значение Описание
      пуск Значение по умолчанию. Указывает, что задание запускает среду. Развертывание создается после запуска задания.
      подготовка Указывает, что задание только подготавливает среду. Он не запускает развертывания. Узнайте больше о подготовке сред.
      stop Указывает, что задание останавливает развертывание. Дополнительные сведения см. в разделе Остановить среду.
      проверка Указывает, что задание проверяет только среду. Он не запускает развертывания. Узнайте больше о проверке сред.
      доступ Указывает, что задание обращается только к среде. Он не запускает развертывания. Узнайте больше о доступе к средам.

      Пример environment:action :

       stop_review_app:
        этап: развертывание
        переменные:
          GIT_STRATEGY: нет
        скрипт: сделать удаление-приложение
        когда: вручную
        Окружающая среда:
          имя: обзор/$CI_COMMIT_REF_SLUG
          действие: стоп
       
      среда: auto_stop_in

      Представлено в GitLab 12.8.

      Ключевое слово auto_stop_in указывает время существования среды. Когда срок действия среды истекает, GitLab автоматически останавливает его.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Период времени, записанный на естественном языке. Например, все они эквивалентны:

      • 168 часов
      • 7 дней
      • One Week
      • никогда не

      Пример Среда: AUTO_STOP_IN :

       Обзор:
        сценарий: развертывание-обзор-приложение
        Окружающая среда:
          имя: обзор/$CI_COMMIT_REF_SLUG
          auto_stop_in: 1 день
       

      При создании среды для review_app срок жизни среды устанавливается равным 1 день . Каждый раз, когда развертывается приложение для проверки, это время жизни также сбрасывается до 9.0011 1 день .

      Похожие темы :

      • Документация по автоматической остановке сред.
      среда: кубернет

      Представлено в GitLab 12.6.

      Используйте ключевое слово kubernetes для настройки развертываний на Кластер Kubernetes, связанный с вашим проектом.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Пример среды : kubernetes :

       развертывание:
        этап: развертывание
        скрипт: сделать деплой-приложение
        Окружающая среда:
          Название: производство
          кубернет:
            пространство имен: производство
       

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

      Дополнительные сведения :

      • Конфигурация Kubernetes не поддерживается для кластеров Kubernetes которыми управляет GitLab. Чтобы следить за ходом поддержки кластеров, управляемых GitLab, см. актуальная проблема.

      Похожие темы :

      • Доступные настройки для kubernetes .
      среда: уровень развертывания

      Представлено в GitLab 13. 10.

      Используйте ключевое слово deployment_tier , чтобы указать уровень среды развертывания.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы : Один из следующих:

      • Производство
      • Постановка
      • Тестирование
      • Development
      • Другие

      Пример : DePloyment_tier 0 . Пример : Deplayment_tier :

      7779 487779 : 80: . сценарий: эхо Окружающая среда: название: клиентский портал уровень_развертывания: производство

      Похожие темы :

      • Уровень развертывания сред.
      Динамические среды

      Используйте переменные CI/CD для динамического присвоения имен средам.

      Например:

       развертывание в качестве приложения для проверки:
        этап: развертывание
        скрипт: сделать деплой
        Окружающая среда:
          имя: обзор/$CI_COMMIT_REF_SLUG
          URL-адрес: https://$CI_ENVIRONMENT_SLUG. example.com/
       

      Задание развертывания в качестве приложения проверки помечено как развертывание для динамического создайте среду обзора /$CI_COMMIT_REF_SLUG . $CI_COMMIT_REF_SLUG — это переменная CI/CD, устанавливаемая исполнителем. Переменная $CI_ENVIRONMENT_SLUG основана на имени среды, но подходит для включения в URL. Если задание развертывания в качестве приложения проверки выполняется в ветке с именем pow , эта среда будет доступна по URL-адресу, например https://review-pow.example.com/ .

      Обычный вариант использования — создание динамических сред для филиалов и их использование как приложения для просмотра. Вы можете увидеть пример, который использует Review Apps на https://gitlab.com/gitlab-examples/review-apps-nginx/.

      расширяет

      Использование расширяет для повторного использования разделов конфигурации. Это альтернатива анкорам YAML. и немного более гибкий и читабельный.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Имя другого задания в конвейере.
      • Список (массив) имен других заданий в конвейере.

      Пример расширения :

       .тесты:
        скрипт: рейк-тест
        этап: тест
        Только:
          ссылки:
            - ветви
      rspec:
        расширяет: .tests
        скрипт: грабли rspec
        Только:
          переменные:
            - $RSPEC
       

      В этом примере задание rspec использует конфигурацию шаблонного задания .tests . При создании конвейера GitLab:

      • Выполняет обратное глубокое слияние на основе ключей.
      • Объединяет содержимое .tests с заданием rspec .
      • Не объединяет значения ключей.

      Результат: rspec job:

       rspec:
        скрипт: грабли rspec
        этап: тест
        Только:
          ссылки:
            - ветви
          переменные:
            - $RSPEC
       

      Дополнительные сведения :

      • В GitLab 12. 0 и более поздних версиях вы можете использовать несколько родителей для extends .
      • Ключевое слово extends поддерживает до одиннадцати уровней наследования, но вы должны избегайте использования более трех уровней.
      • В приведенном выше примере .tests — это скрытое задание, но вы также можете расширить конфигурацию из обычных заданий.

      Похожие темы :

      • Повторное использование разделов конфигурации с помощью extends .
      • Использование расширяет для повторного использования конфигурации из включенных файлов конфигурации.

      изображение

      Используйте образ , чтобы указать образ Docker, в котором выполняется задание.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

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

      • <имя-изображения> (То же, что и при использовании <имя-изображения> с последним тегом )

      Поддерживаются переменные CI/CD.

      Пример изображения :

       по умолчанию:
        изображение: рубин: 3.0
      rspec:
        скрипт: пакет exec rspec
      рспец 2.7:
        образ:Registry.example.com/my-group/my-project/ruby:2.7
        скрипт: пакет exec rspec
       

      В этом примере образ ruby:3.0 используется по умолчанию для всех заданий в конвейере. Задание rspec 2.7 не использует значение по умолчанию, поскольку оно переопределяет значение по умолчанию с помощью конкретная работа изображение раздел.

      Похожие темы :

      • Запускайте задания CI/CD в контейнерах Docker.
      изображение:имя

      Имя образа Docker, в котором выполняется задание. Аналогично образу , который используется сам по себе.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

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

      • <имя-изображения> (То же, что и при использовании <имя-изображения> с последним тегом )

      Пример изображение:имя :

       изображение:
        имя: "registry. example.com/my/image:latest"
       

      Похожие темы :

      • Запускайте задания CI/CD в контейнерах Docker.
      Изображение
      : точка входа

      Команда или сценарий для выполнения в качестве точки входа контейнера.

      При создании контейнера Docker точка входа преобразуется в параметр Docker --entrypoint . Синтаксис аналогичен директиве Dockerfile ENTRYPOINT , где каждый токен оболочки представляет собой отдельную строку в массиве.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • Строка.

      Пример изображения : точка входа :

       изображение:
        имя: супер/sql:экспериментальный
        точка входа: [""]
       

      Похожие темы :

      • Переопределить точку входа изображения.
      изображение:pull_policy

      История версий

      • Представлен в GitLab 15.1 с флагом 9.0011 ci_docker_image_pull_policy . Отключено по умолчанию.
      • Включено на GitLab.com и самостоятельно управляется в GitLab 15.2.
      • Обычно доступно в GitLab 15.4. Флаг функции ci_docker_image_pull_policy удален.
      • Требуется GitLab Runner 15.1 или новее.

      Политика извлечения, используемая исполнителем для получения образа Docker.

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

      Возможные входные данные :

      • Одна политика извлечения или несколько политик извлечения в массиве. Может быть всегда , если нет , или никогда .

      Примеры image:pull_policy :

       job1:
        script: echo "Единая политика извлечения". 
        изображение:
          имя: рубин: 3.0
          pull_policy: если нет
      задание2:
        script: echo "Несколько политик извлечения".
        изображение:
          имя: рубин: 3.0
          pull_policy: [всегда, если нет]
       

      Дополнительные сведения :

      • Если средство выполнения не поддерживает заданную политику извлечения, задание завершается с ошибкой, подобной следующей: ОШИБКА: Сбой задания (сбой системы): настроенные политики PullPolicies ([всегда]) не разрешены AllowedPullPolicies ([никогда]) .

      Похожие темы :

      • Запускайте задания CI/CD в контейнерах Docker.
      • Как работают политики вытягивания бегунов.
      • Использование нескольких политик вытягивания.

      унаследовать

      Представлено в GitLab 12.9.

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

      наследовать: по умолчанию

      Используйте inherit:default для управления наследованием ключевых слов по умолчанию.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • правда (по умолчанию) или false , чтобы включить или отключить наследование всех ключевых слов по умолчанию.
      • Список определенных ключевых слов по умолчанию для наследования.

      Пример наследования : по умолчанию :

       по умолчанию:
        повторить: 2
        изображение: рубин: 3.0
        прерываемый: правда
      задание1:
        script: echo "Это задание не наследует ключевые слова по умолчанию."
        наследовать:
          по умолчанию: ложь
      задание2:
        script: echo "Это задание наследует только два перечисленных ключевых слова по умолчанию. Оно не наследует прерываемое".
        наследовать:
          дефолт:
            - повторить попытку
            - изображение
       

      Дополнительные сведения :

      • Вы также можете перечислить ключевые слова по умолчанию для наследования в одной строке: по умолчанию: [ключевое слово1, ключевое слово2]
      наследовать: переменные

      Используйте inherit:variables для управления наследованием ключевых слов глобальных переменных.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • правда (по умолчанию) или false , чтобы включить или отключить наследование всех глобальных переменных.
      • Список определенных переменных для наследования.

      Пример inherit:variables :

       переменных:
        VARIABLE1: «Это переменная 1»
        ПЕРЕМЕННАЯ2: «Это переменная 2»
        VARIABLE3: «Это переменная 3»
      задание1:
        script: echo "Это задание не наследует глобальные переменные."
        наследовать:
          переменные: ложь
      задание2:
        script: echo "Это задание наследует только две перечисленные глобальные переменные. Оно не наследует 'VARIABLE3'."
        наследовать:
          переменные:
            - ПЕРЕМЕННАЯ1
            - ПЕРЕМЕННАЯ2
       

      Дополнительные сведения :

      • Вы также можете перечислить глобальные переменные для наследования в одной строке: переменных: [ПЕРЕМЕННАЯ1, ПЕРЕМЕННАЯ2]

      прерываемый

      Представлено в GitLab 12. 3.

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

      Это ключевое слово не действует, если выполняется автоматическая отмена избыточных конвейеров. выключен. При включении работающее задание с прерываемый: true отменяется, когда запуск конвейера для нового изменения в той же ветке.

      Вы не можете отменить последующие задания после запуска задания с прерыванием : false .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • true или false (по умолчанию).

      Пример прерываемый :

       ступени:
        - этап 1
        - этап2
        - стадия 3
      шаг 1:
        этап: этап1
        сценарий:
          - эхо "Можно отменить."
        прерываемый: правда
      шаг 2:
        этап: этап2
        сценарий:
          - эхо "Не может быть отменено. "
      шаг 3:
        этап: этап 3
        сценарий:
          - echo "Поскольку шаг 2 не может быть отменен, этот шаг никогда не может быть отменен, даже если он установлен как прерываемый."
        прерываемый: правда
       

      В этом примере новый конвейер приводит к тому, что работающий конвейер становится:

      • Отменено, если только шаг-1 выполняется или находится в ожидании.
      • Не отменяется, после шаг-2 начинается .

      Дополнительные сведения :

      • Установите только прерываемый: true , если задание можно безопасно отменить после его запуска, как строительная работа. Задания развертывания обычно не следует отменять, чтобы предотвратить частичное развертывание.
      • Чтобы полностью отменить работающий конвейер, все задания должны иметь прерывание : true , или прерываемый: false задания не должны быть запущены.

      нужно

      История версий

      • Представлено в GitLab 12. 2.
      • В GitLab 12.3 для максимального количества заданий в требуется массив , увеличенный с пяти до 50.
      • Представленный в GitLab 12.8, требует: [] позволяет запускать задания немедленно.
      • Представленный в GitLab 14.2, вы можете обращаться к заданиям на том же этапе, что и задание, которое вы настраиваете.

      Использование требует для выполнения заданий не по порядку. Отношения между рабочими местами что использование требует , можно представить в виде ориентированного ациклического графа.

      Можно игнорировать порядок этапов и выполнять одни задания, не дожидаясь завершения других. Задания на нескольких этапах могут выполняться одновременно.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Массив заданий.
      • Пустой массив ( [] ), чтобы задание запускалось сразу после создания конвейера.

      Пример потребности :

       linux:build:
        этап: сборка
        скрипт: echo "Сборка Linux..."
      мак:сборка:
        этап: сборка
        script: echo "Сборка Mac..."
      корпия:
        этап: тест
        потребности: []
        скрипт: echo "Линтинг..."
      линукс: rspec:
        этап: тест
        потребности: ["linux:сборка"]
        script: echo "Запуск rspec в Linux..."
      макинтош: rspec:
        этап: тест
        потребности: ["mac:сборка"]
        script: echo "Запуск rspec на Mac..."
      производство:
        этап: развертывание
        script: echo "Выполняется производство..."
        среда: производство
       

      В этом примере создаются четыре пути выполнения:

      • Линтер: задание lint запускается немедленно, не дожидаясь этапа сборки . для завершения, потому что у него нет потребностей ( need: [] ).
      • Путь Linux: задание linux:rspec запускается, как только linux:build задание завершается, не дожидаясь завершения mac:build .
      • путь macOS: задания mac:rspec запускаются, как только mac:build задание завершается, не дожидаясь завершения linux:build .
      • Задание production запускается сразу после завершения всех предыдущих заданий: linux:сборка , linux:rspec , mac:сборка , mac:rspec .

      Дополнительные сведения :

      • Максимальное количество заданий, которое может иметь одно задание в массиве need , ограничено:
        • Для GitLab.com ограничение составляет 50. Для получения дополнительной информации см. вопрос инфраструктуры.
        • Для самоуправляемых экземпляров ограничение по умолчанию равно 50. Это ограничение можно изменить.
      • Если требуется, относится к заданию, в котором используется ключевое слово parallel , это зависит от всех заданий, созданных параллельно, а не только от одного задания. Он также загружает артефакты из всех параллельных заданий по умолчанию. Если артефакты одинаковые имя, они перезаписывают друг друга и сохраняется только последнее загруженное.
      • В GitLab 14.1 и более поздних версиях вы может ссылаться на задания на том же этапе, что и задание, которое вы настраиваете. Эта функция включен на GitLab.com и готов к использованию в продакшене. На самоуправляемом GitLab 14.2 и более поздних версиях эта функция доступна по умолчанию.
      • В GitLab 14.0 и старше вы можете ссылаться только на задания на более ранних стадиях. Этапы должны быть явно определен для всех заданий, которые используют ключевое слово need или на которые ссылаются в задании нужен раздел .
      • В GitLab 13.9 и старше, если требуется, относится к заданию, которое нельзя добавить в конвейер из-за только , кроме или правил , конвейер может не создаться.
      нужно:артефакты

      Представлено в GitLab 12. 6.

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

      Использовать артефакты : true (по умолчанию) или артефакты : false , чтобы контролировать, когда артефакты загружается в задания, которые используют нужно .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Должен использоваться с need:job .

      Возможные входы :

      • true (по умолчанию) или false .

      Пример потребности :артефакты :

       test-job1:
        этап: тест
        потребности:
          - задание: build_job1
            артефакты: правда
      тестовая работа2:
        этап: тест
        потребности:
          - задание: build_job2
            артефакты: ложь
      тестовая работа3:
        потребности:
          - задание: build_job1
            артефакты: правда
          - задание: build_job2
          - build_job3
       

      В этом примере:

      • Задание test-job1 загружает артефакты build_job1
      • Задание test-job2 не загружает артефакты build_job2 .
      • Задание test-job3 загружает артефакты из всех трех build_jobs , потому что артефакты — это true или по умолчанию true для всех трех необходимых заданий.

      Дополнительная информация :

      • В GitLab 12.6 и более поздних версиях вы не можете комбинировать ключевое слово зависимостей . с нужно .
      потребности:проект

      Представлено в GitLab 12.7.

      Используйте need:project для загрузки артефактов из пяти заданий в других конвейерах. Артефакты загружаются из последнего успешного конвейера для указанной ссылки. Чтобы указать несколько заданий, добавьте каждое из них в виде отдельных элементов массива в соответствии с потребностями . 9ключевое слово 0012.

      Если для указанной ссылки запущен конвейер, задание с требует: проект не ждет завершения конвейера. Вместо этого задание загружает артефакт из последнего успешно завершенного конвейера.

      потребности: проект должен использоваться с заданием , ref и артефактами .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • need:project : Полный путь к проекту, включая пространство имен и группу.
      • job : Задание для загрузки артефактов.
      • ref : ссылка для загрузки артефактов.
      • артефакты : для загрузки артефактов должно быть true .

      Примеры потребностей : проект :

       build_job:
        этап: сборка
        сценарий:
          - лс ​​-лр
        потребности:
          - проект: пространство имен/группа/имя-проекта
            работа: сборка-1
            ссылка: основной
            артефакты: правда
          - проект: пространство имен/группа/имя-проекта-2
            задание: сборка-2
            ссылка: основной
            артефакты: правда
       

      В этом примере build_job загружает артефакты из последних успешных заданий build-1 и build-2 . на основных ветвях в проектах group/project-name и group/project-name-2 .

      В GitLab 13.3 и более поздних версиях вы можете использовать переменные CI/CD в need:project , например:

       build_job:
        этап: сборка
        сценарий:
          - лс ​​-лр
        потребности:
          - проект: $CI_PROJECT_PATH
            задание: $DEPENDENCY_JOB_NAME
            ссылка: $ARTIFACTS_DOWNLOAD_REF
            артефакты: правда
       

      Дополнительные сведения :

      • Чтобы загрузить артефакты из другого конвейера в текущем проекте, установите проект быть таким же, как текущий проект, но использовать другую ссылку, чем текущий конвейер. Параллельные конвейеры, работающие на одной и той же ссылке, могут переопределять артефакты.
      • Пользователь, запускающий конвейер, должен иметь как минимум роль Reporter для группы или проекта, или группа/проект должны быть общедоступны.
      • Вы не можете использовать потребности: проект в том же задании, что и триггер .
      • При использовании требуется: проект для загрузки артефактов из другого конвейера, задание не ожидает необходимую работу для завершения. Направленный ациклический граф поведение ограничено заданиями в одном конвейере. Убедитесь, что нужная работа в другом конвейер завершится до того, как требующее его задание попытается загрузить артефакты.
      • Вы не можете загружать артефакты из заданий, которые выполняются в параллельно .
      • Поддержка переменных CI/CD в проекте , задании и ref была представлен в GitLab 13.3. Флаг функции удален в GitLab 13.4.

      Связанные темы :

      • Чтобы загрузить артефакты между родительско-дочерними конвейерами, используйте need:pipeline:job .
      потребности: конвейер: задание

      Представлено в GitLab 13.7.

      Дочерний конвейер может загружать артефакты из задания в его родительский конвейер или другой дочерний конвейер в той же иерархии родительско-дочерних конвейеров.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • need:pipeline : ID конвейера. Должен быть конвейером, присутствующим в той же иерархии родительско-дочернего конвейера.
      • job : Задание для загрузки артефактов.

      Пример need:pipeline:job :

      • Родительский конвейер ( .gitlab-ci.yml ):

         создать артефакт:
          этап: сборка
          скрипт: эхо "образец артефакта" > артефакт.txt
          артефакты:
            пути: [artifact.txt]
        дочерний конвейер:
          этап: тест
          курок:
            включают: child.yml
            стратегия: зависеть
          переменные:
            PARENT_PIPELINE_ID: $CI_PIPELINE_ID
         
      • Дочерний конвейер ( child.yml ):

         артефакт использования:
          скрипт: артефакт кота.txt
          потребности:
            - конвейер: $PARENT_PIPELINE_ID
              задание: создать артефакт
         

      В этом примере 9Задание 0011 create-artifact в родительском конвейере создает некоторые артефакты. Задание child-pipeline запускает дочерний конвейер и передает CI_PIPELINE_ID . в дочерний конвейер как новую переменную PARENT_PIPELINE_ID . Дочерний конвейер можно использовать эту переменную в need:pipeline для загрузки артефактов из родительского конвейера.

      Дополнительные сведения :

      • Атрибут конвейера не принимает идентификатор текущего конвейера ( $CI_PIPELINE_ID ). Чтобы загрузить артефакты из задания в текущем конвейере, используйте , необходимо .
      необходимо: дополнительно

      История версий

      • Представлено в GitLab 13.10.
      • Флаг функции удален в GitLab 14.0.

      Чтобы выполнить задание, которого иногда нет в конвейере, добавьте (необязательно): true для требуется конфигурация . Если не определено, необязательно: по умолчанию используется false .

      Задания, использующие правила , только или кроме не всегда быть добавлен в конвейер. GitLab проверяет отношения need перед запуском конвейер:

      • Если в записи потребностей есть , необязательно: true и необходимое задание присутствует в конвейере, задание ожидает завершения перед запуском.
      • Если нужное задание отсутствует, задание можно запустить, когда будут выполнены все остальные требования.
      • Если нуждается в разделе , содержит только необязательные задания, и ни одно из них не добавляется в конвейер, задание запускается немедленно (так же, как пустая запись need : need: [] ).
      • Если нужное задание имеет option: false , но оно не было добавлено в конвейер, Конвейер не запускается с ошибкой, похожей на: Задание 'job1' нуждается в задании 'job2', но оно не было добавлено в конвейер .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Пример потребности : опционально :

       build-job:
        этап: сборка
      тестовая работа1:
        этап: тест
      тестовая работа2:
        этап: тест
        правила:
          - если: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      развертывание-работа:
        этап: развертывание
        потребности:
          - работа: тестовая работа2
            необязательно: правда
          - работа: тестовая работа1
        среда: производство
      обзор-работа:
        этап: развертывание
        потребности:
          - работа: тестовая работа2
            необязательно: правда
        среда: обзор
       

      В этом примере:

      • сборка-работа , test-job1 и test-job2 запускаются в порядке этапов.
      • Если ветвь является ветвью по умолчанию, test-job2 добавляется в конвейер, поэтому:
        • deploy-job ожидает завершения test-job1 и test-job2 .
        • review-job ожидает завершения test-job2 .
      • Если ветвь не является ветвью по умолчанию, test-job2 не добавляется в конвейер, поэтому:
        • deploy-job ожидает завершения только test-job1 и не ждет отсутствующего test-job2 .
        • review-job не имеет других необходимых заданий и запускается немедленно (в то же время, что и build-job ), как нужно: [] .
      потребности: конвейер

      Вы можете отразить состояние конвейера из вышестоящего конвейера в задание моста, используя потребности : конвейер 9ключевое слово 0012. Последний статус конвейера из ветки по умолчанию: реплицируется на задание моста.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Полный путь к проекту, включая пространство имен и группу. Если проект находится в той же группе или пространстве имен, вы можете опустить их из проекта ключевое слово. Например: проект : имя группы/проекта или проект : имя проекта .

      Пример потребности : трубопровод :

       upstream_bridge:
        этап: тест
        потребности:
          воронка: другое/проект
       

      Дополнительные сведения :

      • Если вы добавите ключевое слово job в need:pipeline , задание больше не будет отражать состояние трубопровода. Поведение меняется на need:pipeline:job .

      только

      / кроме примечание

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

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

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

      См. Укажите, когда задания выполняются только с и , кроме для более подробной информации и примеров.

      Только
      :ссылки / кроме:ссылки

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

      Только : ссылки и , кроме: ссылки активно не разрабатываются. правила:если является предпочтительным ключевым словом при использовании ссылок, регулярных выражений или переменных для управления когда добавлять задания в пайплайны. 9характеристика-.*/ .

    • Следующие ключевые слова:

      9045.
      Значение Описание
      API
      ветвей Когда ссылка Git для конвейера является ветвью.
      chat Для конвейеров, созданных с помощью команды GitLab ChatOps.
      внешний При использовании CI-сервисов, отличных от GitLab.
      external_pull_requests При создании или обновлении внешнего запроса на включение в GitHub (см. Конвейеры для внешних запросов на вытягивание).
      merge_requests Для конвейеров, созданных при создании или обновлении запроса на слияние. Включает конвейеры запросов на слияние, конвейеры объединенных результатов и поезда слияния.
      конвейеры Для многопроектных конвейеров, созданных с помощью API с CI_JOB_TOKEN или ключевого слова триггера .
      pushs Для конвейеров, запускаемых событием git push , в том числе для ветвей и тегов.
      расписания Для запланированных трубопроводов.
      теги Когда ссылка Git для конвейера является тегом. 9стабильная ветвь.*$/ - расписания

      Дополнительные сведения :

      • Запланированные конвейеры выполняются в определенных ветвях, поэтому задания, настроенные только с : ветви также запускать запланированные конвейеры. Добавьте , кроме: расписания для предотвращения заданий только с : филиалы от работы по запланированным конвейерам.
      • Только или , кроме , используемые без каких-либо других ключевых слов, эквивалентны только : ссылки или кроме: refs . Например, следующие две конфигурации заданий имеют одинаковую поведение:

         задание1:
          сценарий: эхо
          Только:
            - ветви
        задание2:
          сценарий: эхо
          Только:
            ссылки:
              - ветви
         
      • Если задание не использует только , кроме или правил , тогда только устанавливается на ветвей и теги по умолчанию.

        Например, задание1 и задание2 эквивалентны:

         задание1:
          скрипт: эхо "тест"
        задание2:
          скрипт: эхо "тест"
          Только:
            - ветви
            - теги
         
      Только
      : переменные / кроме: переменные

      Используйте ключевые слова only:variables или exclude:variables для управления добавлением заданий в конвейер в зависимости от состояния переменных CI/CD.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Массив выражений переменных CI/CD.

      Пример только : переменные :

       развертывание:
        скрипт: деплой промежуточной шапки
        Только:
          переменные:
            - $RELEASE == "постановка"
            - $ ПОСТАНОВКА
       

      Похожие темы :

      • Только : переменные и , кроме: переменных примеров.
      Только
      : изменения / кроме: изменения

      Используйте ключевое слово изменяет с только для запуска задания или с кроме для пропуска задания, когда событие Git push изменяет файл.

      Использовать изменений в конвейерах со следующими ссылками:

      • ответвления
      • external_pull_requests
      • merge_requests (см. дополнительные сведения об использовании 9Только 0011: изменения с конвейерами мерж-реквестов)

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Массив, включающий любое количество:

      • Пути к файлам.
      • Пути с подстановочными знаками для отдельных каталогов, например path/to/directory/* , или каталог и все его подкаталоги, например путь/к/каталогу/**/* .
      • Пути подстановочных знаков для всех файлы с одинаковым или несколькими расширениями, например *.md или путь/к/каталогу/*.{rb,py,sh} . См. документацию Ruby fnmatch . список поддерживаемого синтаксиса.
      • Пути с подстановочными знаками к файлам в корневом каталоге или во всех каталогах, заключенные в двойные кавычки. Например "*. json" или "**/*.json" .

      Пример только : изменения :

       сборка докера:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG .
        Только:
          ссылки:
            - ветви
          изменения:
            - Докерфайл
            - докер/скрипты/*
            - файлы докеров/**/*
            - more_scripts/*.{rb,py,sh}
            - "**/*.json"
       

      Дополнительные детали :

      • изменений преобразуется в true , если какой-либо из соответствующих файлов изменен ().операция 0011 ИЛИ ).
      • Если вы используете ссылки, отличные от ветвей , external_pull_requests или merge_requests , изменяет не может определить, является ли данный файл новым или старым, и всегда возвращает true .
      • Если вы используете только : измените с другими ссылками, задания игнорируют изменения и всегда выполняются.
      • Если вы используете , кроме: изменения с другими ссылками, задания игнорируют изменения и никогда не запускаются.

      Похожие темы :

      • Только : изменяет и , кроме: изменяет примеров.
      • Если вы используете изменения с разрешением мерж-реквестов только в случае успеха конвейера, вы также должны использовать только :merge_requests .
      • Задания или конвейеры могут запускаться неожиданно при использовании только : изменения .
      Только
      : kubernetes / кроме: kubernetes

      Используйте только : kubernetes или , кроме: kubernetes для управления добавлением заданий в конвейер. когда служба Kubernetes активна в проекте.

      Только : ссылки и , кроме: ссылки активно не разрабатываются. Использовать правила :если с предопределенной переменной CI/CD CI_KUBERNETES_ACTIVE чтобы контролировать, добавляются ли задания в конвейер, когда служба Kubernetes активна в проекте.

      Тип ключевого слова : Специально для работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Стратегия kubernetes принимает только ключевое слово active .

      Пример только : kubernetes :

       развертывание:
        Только:
          Кубернетес: активен
       

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

      страниц

      Используйте страниц , чтобы определить задание GitLab Pages, которое загружает статический контент в GitLab. Затем контент публикуется как веб-сайт.

      Тип ключевого слова : Имя задания.

      Пример страниц :

       страниц:
        этап: развертывание
        сценарий:
          - mkdir .public
          -cp -r * .public
          - mv .public общественность
        артефакты:
          пути:
            - общественный
        правила:
          - если: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
        среда: производство
       

      В этом примере все файлы перемещаются из корня проекта в каталог public/. Обходной путь .public так cp также не копирует public/ в себя в бесконечном цикле.

      Дополнительные сведения :

      Необходимо:

      • Поместите любой статический контент в каталог public/.
      • Определить артефакты с путем к каталогу public/.

      параллельно

      Используйте parallel для запуска задания несколько раз параллельно в одном конвейере.

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

      Параллельные задания именуются последовательно от job_name 1/N до job_name N/N .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Числовое значение от 2 до 50 .

      Пример параллельно :

       тест:
        сценарий: rspec
        параллельно: 5
       

      В этом примере создается 5 параллельно выполняемых заданий с именем тест 1/5 до тест 5/5 .

      Дополнительные сведения :

      • Каждое параллельное задание имеет CI_NODE_INDEX и CI_NODE_TOTAL предопределенный набор переменных CI/CD.

      Похожие темы :

      • Распараллеливайте большие задачи.
      параллель:матрица

      История версий

      • Представлено в GitLab 13.3.
      • Стиль именования заданий был улучшен в GitLab 13.4.

      Используйте parallel:matrix для запуска задания несколько раз параллельно в одном конвейере, но с разными значениями переменных для каждого экземпляра задания.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Массив хэшей переменных:

      • В именах переменных могут использоваться только цифры, буквы и знаки подчеркивания ( _ ).
      • Значения должны быть либо строкой, либо массивом строк.
      • Количество перестановок не может превышать 50.

      Пример parallel:matrix :

       deploystacks:
        этап: развертывание
        сценарий:
          - бин/развернуть
        параллельно:
          матрица:
            - ПРОВАЙДЕР: aws
              КУЧА:
                - мониторинг
                - приложение1
                - приложение2
            - ПРОВАЙДЕР: ovh
              СТЕК: [мониторинг, резервное копирование, приложение]
            - ПРОВАЙДЕР: [gcp, vultr]
              СТЕК: [данные, обработка]
        среда: $PROVIDER/$STACK
       

      В этом примере создается 10 параллельных заданий deploystacks , каждое из которых имеет разные значения для PROVIDER и STACK :

       deploystacks: [aws, мониторинг]
      развертывание стеков: [aws, app1]
      развертывание стеков: [aws, app2]
      deploystacks: [ovh, мониторинг]
      deploystacks: [ovh, резервная копия]
      развертывание стеков: [ovh, приложение]
      развертывание стеков: [gcp, данные]
      deploystacks: [gcp, обработка]
      развертывание стеков: [vultr, данные]
      deploystacks: [vultr, обработка]
       

      Похожие темы :

      • Запустите одномерную матрицу параллельных заданий.
      • Запустите матрицу запущенных параллельных заданий.
      • Выберите разные теги бегуна для каждого параллельного матричного задания.

      выпуск

      Представлено в GitLab 13.2.

      Используйте версию для создания версии.

      Задание выпуска должно иметь доступ к Release-cli , который должен быть в $PATH .

      Если вы используете исполнителя Docker, вы можете использовать этот образ из реестра контейнеров GitLab: register.gitlab.com/gitlab-org/release-cli:latest

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы : Подключи версии :

      • tag_name
      • tag_message (необязательно)
      • имя (опционально)
      • описание
      • (дополнительно)
      • вехи (опционально)
      • Release_at (опционально)
      • assets:links (необязательно)

      Пример ключевого слова выпуска :

       release_job:
        этап: релиз
        образ:Registry. gitlab.com/gitlab-org/release-cli:latest
        правила:
          - if: $CI_COMMIT_TAG # Запускать это задание, когда тег создается вручную
        сценарий:
          - echo "Выполняется задание выпуска."
        выпускать:
          имя_тега: $CI_COMMIT_TAG
          имя: 'Выпустить $CI_COMMIT_TAG'
          description: 'Релиз создан с помощью Release-cli.'
       

      В этом примере создается релиз:

      • При нажатии тега Git.
      • При добавлении тега Git в пользовательский интерфейс в разделе Репозиторий > Теги .

      Дополнительная информация :

      • Все задания выпуска, за исключением заданий запуска, должны включать ключевое слово сценария . Релиз job может использовать вывод команд сценария. Если вам не нужен скрипт, вы можете использовать заполнитель: скрипт

        :
          - эхо "выпустить задание"
         

        Существует проблема, связанная с удалением этого требования.

      • Раздел версии выполняется после ключевого слова сценария и перед after_script .
      • Релиз создается только в случае успешного выполнения основного сценария задания.
      • Если выпуск уже существует, он не обновляется, и задание с ключевым словом выпуска завершается сбоем.

      Похожие темы :

      • Пример CI/CD для ключевого слова версии .
      • Создавайте несколько выпусков в одном конвейере.
      • Используйте пользовательский центр сертификации SSL CA.
      Релиз
      : имя_тега

      Обязательно. Тег Git для релиза.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Имя тега.

      Поддерживаются переменные CI/CD.

      Пример release:tag_name :

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

      • Используйте переменную $CI_COMMIT_TAG CI/CD в качестве тега 1_2name .
      • Использовать правила : если только или : теги для настройки задание запускать только для новых тегов.
       работа:
        script: echo "Выполняется задание выпуска для нового тега."
        выпускать:
          имя_тега: $CI_COMMIT_TAG
          description: 'Описание релиза'
        правила:
          - если: $CI_COMMIT_TAG
       

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

       job:
        script: echo "Запуск задания выпуска и создание нового тега."
        выпускать:
          tag_name: ${MAJOR}_${MINOR}_${REVISION}
          description: 'Описание релиза'
        правила:
          - если: $CI_PIPELINE_SOURCE == "расписание"
       
      Выпуск
      :tag_message

      Представлено в GitLab 15.3. Поддерживается Release-cli v0.12.0 или более поздней версии.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Текстовая строка.

      Пример release:tag_message :

       release_job:
          этап: релиз
          выпускать:
            имя_тега: $CI_COMMIT_TAG
            description: 'Описание релиза'
            tag_message: 'Аннотированное сообщение тега'
       
      Версия
      : имя

      Название выпуска. Если он опущен, он заполняется значением выпуска : tag_name .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Текстовая строка.

      Пример релиз:имя :

       релиз_работа:
          этап: релиз
          выпускать:
            имя: 'Выпустить $CI_COMMIT_TAG'
       
      Выпуск
      : описание

      Подробное описание релиза.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Строка с длинным описанием.
      • Путь к файлу, содержащему описание. Представлено в GitLab 13.7.
        • Расположение файла должно быть относительно каталога проекта ( $CI_PROJECT_DIR ).
        • Если файл является символической ссылкой, он должен быть в $CI_PROJECT_DIR .
        • ./path/to/file и имя файла не могут содержать пробелы.

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

       задание:
        выпускать:
          tag_name: ${MAJOR}_${MINOR}_${REVISION}
          описание: './path/to/CHANGELOG.md'
       
      Выпуск
      : ссылка

      ref для выпуска, если выпуск : tag_name еще не существует.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • SHA фиксации, другое имя тега или имя ветки.
      Выпуск
      : вехи

      Название каждой вехи, с которой связан выпуск.

      Выпуск
      :released_at

      Дата и время готовности релиза.

      Возможные значения :

      • Дата, заключенная в кавычки и выраженная в формате ISO 8601.

      Пример выпуска :released_at :

       Release_at: '2021-03-15T08:00:00Z'
       

      Дополнительные сведения :

      • Если не указано, используются текущие дата и время.
      выпуск:активы:ссылки

      Представлено в GitLab 13.12.

      Используйте release:assets:links , чтобы включить ссылки на активы в выпуск.

      Требуется release-cli версии v0.4.0 или выше.

      Пример выпуска : активы: ссылки :

       активы:
        ссылки:
          - имя: 'актив1'
            URL-адрес: https://example. com/assets/1.
          - имя: 'актив2'
            URL-адрес: «https://example.com/assets/2»
            путь к файлу: '/pretty/url/1' # необязательно
            link_type: 'другое' # необязательно
       

      группа_ресурсов

      Представлено в GitLab 12.7.

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

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

      Группы ресурсов ведут себя аналогично семафорам в других языках программирования.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • только буквы, цифры, - , _ , /, $ , {, } , . и пробелы. Он не может начинаться или заканчиваться на /. Поддерживаются переменные CI/CD.

      Пример resource_group :

       развертывание в рабочей среде:
        сценарий: развернуть
        группа_ресурсов: производство
       

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

      Похожие темы :

      • Контроль параллелизма на уровне конвейера с конвейерами между проектами и родителем-потомком.

      повторить попытку

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

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

      По умолчанию все типы сбоев вызывают повторную попытку задания. Использовать повтор: когда чтобы выбрать, при каких ошибках повторить попытку.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • 0 (по умолчанию), 1 или 2 .

      Пример повторной попытки :

       теста:
        сценарий: rspec
        повторить: 2
       
      повтор: когда

      Используйте повторную попытку : когда с повторной попыткой : макс. , чтобы повторить задания только для определенных случаев сбоя. retry:max — это максимальное количество повторных попыток, например retry , и может быть 0 , 1 или 2 .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входы :

      • Один тип отказа или массив из одного или нескольких типов отказа:
      • всегда : повторите попытку при любом сбое (по умолчанию).
      • unknown_failure : повторите попытку, если причина сбоя неизвестна.
      • script_failure : повторите попытку после сбоя сценария.
      • api_failure : повторите попытку при сбое API.
      • stick_or_timeout_failure : повторите попытку, если задание зависло или истекло время ожидания.
      • runner_system_failure : повторите попытку, если произошел сбой системы бегуна (например, сбой настройки задания).
      • runner_unsupported : повторите попытку, если бегун не поддерживается.
      • stale_schedule : повторите попытку, если отложенное задание не может быть выполнено.
      • job_execution_timeout : повторите попытку, если сценарий превысил максимальное время выполнения, установленное для задания.
      • archived_failure : повторите попытку, если задание заархивировано и не может быть запущено.
      • unmet_prerequisites : повторите попытку, если задание не смогло выполнить предварительные задачи.
      • scheduler_failure : повторите попытку, если планировщику не удалось назначить задание исполнителю.
      • data_integrity_failure : повторите попытку, если обнаружена проблема структурной целостности.

      Пример повторной попытки : когда (тип одиночного отказа):

       тест:
        сценарий: rspec
        повторить:
          макс: 2
          когда: runner_system_failure
       

      В случае сбоя, отличного от сбоя системы бегуна, задание не повторяется.

      Пример повторной попытки : когда (массив типов ошибок):

       тест:
        сценарий: rspec
        повторить:
          макс: 2
          когда:
            - runner_system_failure
            - застрял_or_timeout_failure
       

      Связанные темы :

      Можно указать количество повторных попыток для определенных этапов выполнения задания. используя переменные.

      правила

      Представлено в GitLab 12.3.

      Используйте правила для включения или исключения заданий в конвейерах.

      Правила оцениваются при создании конвейера и оцениваются в порядке до первого матча. Когда совпадение найдено, задание либо включается, либо исключается из конвейера. в зависимости от конфигурации.

      Переменные dotenv, созданные в сценариях заданий, нельзя использовать в правилах, поскольку правила оцениваются перед выполнением любых заданий.

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

      rules accepts an array of rules defined with:

      • if
      • changes
      • exists
      • allow_failure
      • variables
      • когда

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

      Задание добавлено в конвейер:

      • Если if , изменяет или существует соответствует правилу, а также имеет когда: on_success (по умолчанию), когда: задержано или когда: всегда .
      • Если достигнуто правило, равное только , когда: on_success , , когда: задержано , или , когда: всегда .

      Задание не добавлено в конвейер:

      • Если ни одно правило не соответствует.
      • Если правило соответствует и имеет когда: никогда .

      Вы можете использовать теги !reference для повторного использования правил конфигурации на разных работах.

      правила:если

      Используйте правила : условия if , чтобы указать, когда добавлять задание в конвейер:

      • Если утверждение if истинно, добавьте задание в конвейер.
      • Если утверждение if верно, но оно сочетается с , когда: никогда , не добавлять задание в конвейер.
      • Если нет , если утверждения верны, не добавляйте задание в конвейер.

      , если предложений оцениваются на основе значений предопределенных переменных CI/CD или пользовательские переменные CI/CD.

      Тип ключевого слова : зависит от задания и конвейера. Вы можете использовать его как часть работы для настройки поведения задания или с помощью 9особенность/ когда: вручную allow_failure: правда - если: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME

      Дополнительные сведения :

      • Если правило соответствует и не имеет , когда определено , правило использует , когда определено для задания, которое по умолчанию равно on_success , если не определено.
      • В GitLab 14.5 и более ранних версиях вы можете определить , когда один раз для правила или один раз на уровне задания, что относится ко всем правилам. нельзя смешивать при на уровне задания с при в правилах.
      • В GitLab 14.6 и более поздних версиях вы можете смешивать , когда на уровне задания, с , когда в правилах. когда конфигурация в правил имеет приоритет над когда на уровне задания.
      • В отличие от переменных в сценарии разделы, переменные в выражениях правил всегда имеют формат $VARIABLE .
        • Можно использовать правила :если с включает для условного включения других файлов конфигурации.
      • Переменные CI/CD в правой части выражений =~ и !~ оцениваются как регулярные выражения.

      Похожие темы :

      • Общие если выражения для правила .
      • Избегайте дублирования конвейеров.
      • Используйте правила для запуска конвейеров мерж-реквестов.
      правил:изменений

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

      предостережение

      Вы должны использовать правила : изменения только с ответвлениями или мерж-реквестами . Вы можете использовать правила : изменяет с другими типами конвейеров, но правила : изменяет всегда оценивается как true, если нет события Git push . Конвейеры тегов, запланированные конвейеры, ручные конвейеры, и так далее , а не имеют событие Git push , связанное с ними. Правила : изменение задания всегда добавляется к этим конвейерам, если нет , если ограничивает задание до конвейеры ответвлений или мерж-реквестов.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Массив путей к файлам. В GitLab 13.6 и более поздних версиях пути к файлам могут включать переменные.
      • В качестве альтернативы массив путей к файлам может состоять из правила:изменения:пути .

      Пример правил : изменения :

       сборка докера:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG .
        правила:
          - если: $CI_PIPELINE_SOURCE == "merge_request_event"
            изменения:
              - Докерфайл
            когда: вручную
            allow_failure: правда
       
      • Если конвейер является конвейером запросов на слияние, проверьте Dockerfile на наличие изменений.
      • Если Dockerfile изменился, добавьте задание в конвейер как ручное задание, а конвейер продолжает работать, даже если задание не запущено ( allow_failure: true ).
      • Если Dockerfile не изменился, не добавляйте задание ни в один конвейер (так же, как , когда: никогда ).
      • rules:changes:paths совпадает с rules:changes без любые подразделы.

      Дополнительная информация :

      • Правила : изменения работают так же, как и , только: изменения и , кроме: изменения .
      • Вы можете использовать когда: никогда для реализации правила, аналогичного , за исключением:changes .
      • изменяет преобразуется в true , если изменяется любой из соответствующих файлов (операция ИЛИ ).

      Похожие темы :

      • Задания или конвейеры могут запускаться неожиданно при использовании правил : изменения .
      правила:изменения:пути

      Представлено в GitLab 15. 2.

      Используйте правила : измените , чтобы указать, что задание будет добавляться в конвейер только тогда, когда оно указано файлы изменены, и используйте rules:changes:paths указать файлы.

      правила:изменения:пути аналогично использованию правила:изменения без любые подразделы. Все дополнительные детали и сопутствующие темы остаются прежними.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Массив путей к файлам. В GitLab 13.6 и более поздних версиях пути к файлам могут включать переменные.

      Пример правила: изменения: пути :

       докер-сборка-1:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG .
        правила:
          - если: $CI_PIPELINE_SOURCE == "merge_request_event"
            изменения:
              - Докерфайл
      докер-сборка-2:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG . 
        правила:
          - если: $CI_PIPELINE_SOURCE == "merge_request_event"
            изменения:
              пути:
                - Докерфайл
       

      В этом примере оба задания ведут себя одинаково.

      правила:изменения:сравнить_с

      Представлен в GitLab 15.3 с флагом ci_rules_changes_compare . Включено по умолчанию.

      Используйте rules:changes:compare_to , чтобы указать, с какой ссылкой сравнивать изменения в файлах перечислены в разделе rules:changes:paths .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть задания, и он должен быть объединен с rules:changes:paths .

      Возможные входы :

      • Имя ветки, например main , branch2 или refs/heads/branch2 .
      • Имя тега, например tag1 или refs/tags/tag1 .
      • SHA фиксации, например 2fg31ga14b .

      Пример rules:changes:compare_to :

       docker build:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG .
        правила:
          - если: $CI_PIPELINE_SOURCE == "merge_request_event"
            изменения:
              пути:
                - Докерфайл
              compare_to: 'refs/heads/branch2'
       

      В этом примере задание docker build включается только при изменении Dockerfile . относительно refs/heads/branch2 , а источником конвейера является событие запроса на слияние.

      правил:существует

      Представлено в GitLab 12.4.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Массив путей к файлам. Пути относятся к каталогу проекта ( $CI_PROJECT_DIR ) и не может напрямую ссылаться за его пределами. Пути к файлам могут использовать шаблоны глобусов.

      Пример правил :существует :

       задание:
        скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG .
        правила:
          - существуют:
              - Докерфайл
       

      Задание выполняется, если Dockerfile существует где-либо в репозитории.

      Дополнительные сведения :

      • Шаблоны Glob интерпретируются с помощью Ruby File.fnmatch с флагами File::FNM_PATHNAME | Файл::FNM_DOTMATCH | Файл::FNM_EXTGLOB .
      • Из соображений производительности GitLab соответствует максимум 10 000 существует шаблонов или пути к файлам. После 10 000-й проверки правила с шаблонными глобусами всегда совпадают. Другими словами, существует всегда сообщает верно если более 10000 проверок бегать. Репозитории с менее чем 10 000 файлов могут быть затронуты, если существует правила проверены более 10000 раз.
      • существует преобразуется в true , если найден какой-либо из перечисленных файлов (операция ИЛИ ).
      правила:allow_failure

      Представлено в GitLab 12.8.

      Используйте allow_failure: true в правилах , чтобы разрешить сбой задания без остановки трубопровода.

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

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • истина или ложь . По умолчанию false , если не определено.

      Пример правил :allow_failure :

       задание:
        script: echo "Привет, Правила!"
        правила:
          - если: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
            когда: вручную
            allow_failure: правда
       

      Если правило соответствует, то задание выполняется вручную с allow_failure: true .

      Дополнительные сведения :

      • Правила уровня rules:allow_failure переопределяют уровень задания allow_failure , и применяется только тогда, когда определенное правило запускает задание.
      правила: переменные

      История версий

      • Представлено в GitLab 13.7.
      • Флаг функции удален в GitLab 13.10.

      Используйте переменные в правилах для определения переменных для конкретных условий.

      Тип ключевого слова : Специально для работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Хэш переменных в формате ИМЯ-ПЕРЕМЕННОЙ: значение .

      Пример правил : переменные :

       задание:
        переменные:
          DEPLOY_VARIABLE: «развертывание по умолчанию»
        правила:
          - если: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
            переменные: # Переопределить DEPLOY_VARIABLE определено
              DEPLOY_VARIABLE: "deploy-production" # на уровне задания.
          - если: $CI_COMMIT_REF_NAME =~ /feature/
            переменные:
              IS_A_FEATURE: "true" # Определить новую переменную.
        сценарий:
          - echo "Запустить скрипт с $DEPLOY_VARIABLE в качестве аргумента"
          - echo "Запустить другой скрипт, если $IS_A_FEATURE существует"
       

      скрипт

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

      Для всех заданий, кроме триггерных, требуется ключевое слово сценария .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Массив, включающий:

      • Однострочные команды.
      • Длинные команды разбиты на несколько строк.
      • Якоря YAML.

      Поддерживаются переменные CI/CD.

      Пример сценария :

       задание 1:
        скрипт: "комплект exec rspec"
      задание2:
        сценарий:
          - имя-а
          - пакет exec rspec
       

      Дополнительная информация :

      • Когда вы используете эти специальные символы в сценарии , вы должны использовать отдельные цитаты ( ') или двойные цитаты ( ").

      Связанные Топы :

      2

      .

    • Вы можете игнорировать ненулевые коды выхода
    • Используйте цветовые коды с сценарий для облегчения просмотра журналов заданий.
    • Создание настраиваемых складных разделов для упрощения вывода журнала заданий.
    • секретов

      Представлено в GitLab 13.4.

      Используйте секреты , чтобы указать секреты CI/CD для:

      • Получить от внешнего поставщика секретов.
      • Сделать доступными в задании переменные CI/CD ( тип файла по умолчанию).

      Это ключевое слово должно использоваться с secrets:vault .

      секреты: хранилище

      Представлен в GitLab 13.4 и GitLab Runner 13.4.

      Используйте secrets:vault для указания секретов, предоставляемых хранилищем HashiCorp.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • engine:name : Название механизма секретов.
      • engine:path : Путь к движку секретов.
      • путь : Путь к секрету.
      • поле : Имя поля, в котором хранится пароль.

      Пример secrets:vault :

      Чтобы явно указать все детали и использовать механизм секретов KV-V2:

       job:
        секреты:
          DATABASE_PASSWORD: # Сохраняем путь к секрету в этой переменной CI/CD
            vault: # Переводится как секрет: `ops/data/production/db`, поле: `пароль`
              двигатель:
                название: кв-в2
                путь: опс
              путь: производство/дб
              поле: пароль
       

      Вы можете сократить этот синтаксис. С коротким синтаксисом двигатель:имя и двигатель:путь оба по умолчанию kv-v2 :

       задание:
        секреты:
          DATABASE_PASSWORD: # Сохраняем путь к секрету в этой переменной CI/CD
            vault: production/db/password # Переводит в secret: `kv-v2/data/production/db`, поле: `password`
       

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

       работа:
        секреты:
          DATABASE_PASSWORD: # Сохраняем путь к секрету в этой переменной CI/CD
            vault: production/db/[email protected] # Переводит в секрет: `ops/data/production/db`, поле: `пароль`
       
      секреты:файл

      Представлен в GitLab 14. 1 и GitLab Runner 14.1.

      Используйте secrets:file для настройки сохранения секрета как файл или переменная тип переменная CI/CD

      По умолчанию секрет передается заданию как файл тип переменной CI/CD. Значение секрет хранится в файле, а переменная содержит путь к файлу.

      Если ваше программное обеспечение не может использовать переменные CI/CD типа file , установите file: false для хранения секретное значение непосредственно в переменной.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • true (по умолчанию) или false .

      Пример секретов: файл :

       задание:
        секреты:
          DATABASE_PASSWORD:
            хранилище: production/db/[email protected]
            файл: ложь
       

      Дополнительные сведения :

      • Ключевое слово файла является параметром для переменной CI/CD и должно быть вложено в имя переменной CI/CD, не в разделе хранилища .

      услуги

      Используйте службы , чтобы указать дополнительный образ Docker для запуска сценариев. услуги изображение связано к изображению, указанному в ключевом слове image .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

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

      • (То же, что и при использовании с последним тегом )
      • :
      • @

      Переменные CI/CD поддерживаются, но не для псевдонима .

      Пример службы :

       по умолчанию:
        изображение:
          имя: рубин: 2,6
          точка входа: ["/bin/bash"]
        Сервисы:
          - имя: my-postgres:11. 7
            псевдоним: db-postgres
            точка входа: ["/usr/local/bin/db-postgres"]
            команда: ["старт"]
        до_скрипта:
          - пакетная установка
      тест:
        сценарий:
          - пакетная спецификация рейка exec
       

      В этом примере задание запускает контейнер Ruby. Затем из этого контейнера запускается задание другой контейнер, на котором работает PostgreSQL. Затем задание запускает сценарии в этом контейнере.

      Похожие темы :

      • Доступные настройки для служб .
      • Определите службы в файле .gitlab-ci.yml .
      • Запускайте задания CI/CD в контейнерах Docker.
      • Используйте Docker для создания образов Docker.
      служба: pull_policy

      История версий

      • Представлен в GitLab 15.1 с флагом ci_docker_image_pull_policy . Отключено по умолчанию.
      • Включено на GitLab.com и самостоятельно управляется в GitLab 15. 2.
      • Обычно доступно в GitLab 15.4. Флаг функции ci_docker_image_pull_policy удален.
      • Требуется GitLab Runner 15.1 или новее.

      Политика извлечения, используемая исполнителем для получения образа Docker.

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

      Возможные входные данные :

      • Одна политика извлечения или несколько политик извлечения в массиве. Может быть всегда , если нет , или никогда .

      Примеры service:pull_policy :

       job1:
        script: echo "Единая политика извлечения".
        Сервисы:
          - имя: postgres:11.6
            pull_policy: если нет
      задание2:
        script: echo "Несколько политик извлечения".
        Сервисы:
          - имя: postgres:11.6
            pull_policy: [всегда, если нет]
       

      Дополнительные сведения :

      • Если средство выполнения не поддерживает заданную политику извлечения, задание завершается с ошибкой, подобной следующей: ОШИБКА: Сбой задания (сбой системы): настроенные политики PullPolicies ([всегда]) не разрешены AllowedPullPolicies ([никогда]) .

      Похожие темы :

      • Запускайте задания CI/CD в контейнерах Docker.
      • Как работают политики вытягивания бегунов.
      • Использование нескольких политик вытягивания.

      этап

      Используйте stage , чтобы определить, на каком этапе выполняется задание. стадия может выполняться параллельно (см. Дополнительные сведения ).

      Если стадия не определена, задание по умолчанию использует тестовую стадию .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные : Массив, включающий любое количество имен этапов. Сценические имена могут быть:

      • Стадии по умолчанию.
      • Определяемые пользователем этапы.

      Пример столика :

       столика:
        - строить
        - тест
        - развертывать
      задание1:
        этап: сборка
        сценарий:
          - echo "Это задание компилирует код. "
      задание2:
        этап: тест
        сценарий:
          - echo "Это задание проверяет скомпилированный код. Оно запускается после завершения этапа сборки."
      задание3:
        сценарий:
          - echo "Это задание также выполняется на этапе тестирования".
      задание4:
        этап: развертывание
        сценарий:
          - echo "Это задание развертывает код. Оно запускается после завершения этапа тестирования."
        среда: производство
       

      Дополнительные сведения :

      • Задания могут выполняться параллельно, если они выполняются на разных исполнителях.
      • Если у вас есть только один бегун, задания могут выполняться параллельно, если бегун одновременная настройка больше, чем 1 .
      этап: .pre

      Представлено в GitLab 12.4.

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

      Если конвейер содержит только задания на этапах .pre или .post , он не запускается. На другом этапе должна быть хотя бы одна другая работа.

      Тип ключевого слова : Вы можете использовать его только с ключевым словом задания stage .

      Пример стадии : .pre :

       стадии:
        - строить
        - тест
      задание1:
        этап: сборка
        сценарий:
          - echo "Это задание выполняется на этапе сборки."
      Первая работа:
        этап: .pre
        сценарий:
          - echo "Это задание выполняется на этапе .pre перед всеми остальными этапами."
      задание2:
        этап: тест
        сценарий:
          - echo "Это задание выполняется на этапе тестирования."
       
      этап: .post

      Представлено в GitLab 12.4.

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

      Если конвейер содержит только задания на этапах .pre или .post , он не запускается. На другом этапе должна быть хотя бы одна другая работа.

      Тип ключевого слова : Вы можете использовать его только с ключевым словом задания stage .

      Пример стадии : .post :

       стадии:
        - строить
        - тест
      задание1:
        этап: сборка
        сценарий:
          - echo "Это задание выполняется на этапе сборки."
      Последнее место работы:
        этап: .post
        сценарий:
          - echo "Это задание выполняется на этапе .post после всех остальных этапов."
      задание2:
        этап: тест
        сценарий:
          - echo "Это задание выполняется на этапе тестирования."
       

      теги

      История версий

      • Ограничение в 50 тегов на задание включено на GitLab. com в GitLab 14.3.
      • Ограничение в 50 тегов на задание, включенное для самостоятельного управления в GitLab 14.3.

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

      При регистрации бегуна можно указать теги бегуна, для пример ruby ​​ , postgres или development . Чтобы взяться за дело и запустить его, бегун должен быть присвоен каждому тегу, указанному в задании.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные :

      • Массив имен тегов.
      • Переменные CI/CD поддерживаются в GitLab 14.1 и выше.

      Пример тегов :

       задание:
        теги:
          - Рубин
          - постгрес
       

      В этом примере только бегуны с и и рубинами и теги postgres могут выполнять задание.

      Дополнительные сведения :

      • В GitLab 14.3 и более поздних версиях количество тегов должно быть меньше 50 .

      Похожие темы :

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

      тайм-аут

      Представлено в GitLab 12.3.

      Использовать тайм-аут , чтобы настроить тайм-аут для определенного задания. Если работа длится дольше чем тайм-аут, задание не выполняется.

      Время ожидания на уровне задания может превышать время ожидания на уровне проекта. но не может быть больше тайм-аута бегуна.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в раздел по умолчанию .

      Возможные входные данные : Период времени, записанный на естественном языке. Например, все они эквивалентны:

      • 3600 секунд
      • 60 минут
      • один час

      Пример таймаута 905 8:904 905 скрипт: build.sh тайм-аут: 3 часа 30 минут тест: сценарий: rspec тайм-аут: 3 часа 30 минут

      триггер

      Используйте триггер , чтобы объявить задание «триггерным заданием», которое запускает нисходящий трубопровод:

      • Многопроектный пайплайн.
      • Дочерний конвейер.

      Триггерные задания могут использовать только ограниченный набор ключевых слов конфигурации GitLab CI/CD. Ключевые слова, доступные для использования в триггерных заданиях:

      • триггер .
      • этап .
      • разрешить_сбой .
      • правила .
      • только и кроме .
      • при (только со значением on_success , on_failure или всегда ).
      • расширяет .
      • нужно , но не нужно: проект .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Для конвейеров с несколькими проектами — путь к нижестоящему проекту. Поддерживаются переменные CI/CD в GitLab 15.3 и более поздних версиях, но не сохраняемые переменные уровня задания. В качестве альтернативы используйте `trigger:project.
      • Для дочерних конвейеров используйте 9Триггер 0011: включить .

      Пример триггера :

       триггер-многопроектный-конвейер:
        триггер: моя группа/мой проект
       

      Дополнительные сведения :

      • Вы не можете использовать API для запуска , когда:ручной запуск заданий.
      • В GitLab 13.5 и более поздних версиях вы можно использовать , когда: вручную в том же задании, что и , инициировать . В GitLab 13.4 и ранее их совместное использование вызывало ошибку jobs:#{job-name}, когда должно быть on_success, on_failure или всегда .
      • Ручные переменные конвейера и запланированные переменные конвейера по умолчанию не передаются нижестоящим конвейерам. Использовать триггер: вперед для пересылки этих переменных в нижестоящие конвейеры.
      • Сохраняемые переменные уровня задания недоступны в триггерных заданиях.

      Похожие темы :

      • Примеры конфигурации многопроектного пайплайна.
      • Чтобы запустить конвейер для определенной ветки, тега или фиксации, вы можете использовать токен триггера. для аутентификации с помощью API триггеров конвейера. Токен триггера отличается от запускает ключевое слово .
      Триггер
      : включить

      Используйте триггер : включите , чтобы объявить, что задание является «триггерным заданием», которое запускает дочерний трубопровод.

      Используйте trigger:include:artifact для запуска динамического дочернего конвейера.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входные данные :

      • Путь к файлу конфигурации дочернего конвейера.

      Пример триггера : включить :

       триггер-дочерний конвейер:
        курок:
          включают: путь/к/child-pipeline.gitlab-ci.yml
       

      Похожие темы :

      • Примеры конфигурации дочернего конвейера.
      Триггер
      : проект

      Используйте триггер : проект , чтобы объявить задание «триггерным заданием», которое запускает многопроектный пайплайн.

      По умолчанию многопроектный конвейер запускается для ветви по умолчанию. Используйте 9Триггер 0011:ветвь чтобы указать другую ветвь.

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы.

      Возможные входы :

      • Путь к нижестоящему проекту. Поддерживаются переменные CI/CD в GitLab 15.3 и более поздних версиях, но не сохраняемые переменные уровня задания.

      Пример триггера :проект :

       триггер-многопроектный-конвейер:
        курок:
          проект: моя группа/мой проект
       

      Пример триггера : проект для другой ветки :

       триггер-мультипроект-конвейер:
        курок:
          проект: моя группа/мой проект
          отрасль: разработка
       

      Похожие темы :

      • Примеры конфигурации многопроектного пайплайна.
      • Чтобы запустить конвейер для определенной ветки, тега или фиксации, вы также можете использовать токен триггера. для аутентификации с помощью API триггеров конвейера. Токен триггера отличается от запускает ключевое слово .
      триггер:стратегия

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

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

      Этот параметр делает выполнение конвейера линейным, а не параллельным.

      Пример триггера : стратегия :

       trigger_job:
        курок:
          включают: путь/к/child-pipeline.yml
          стратегия: зависеть
       

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

      Дополнительные детали :

      • Дополнительные ручные задания в нисходящем конвейере не влияют на состояние нижестоящего конвейера или вышестоящего триггерного задания. Нисходящий конвейер может успешно завершиться без выполнения каких-либо дополнительных ручных заданий.
      • Блокирование ручных заданий в нисходящем конвейере должен выполняться до того, как задание триггера будет помечено как успешное или неудачное. Триггерная работа показывает в ожидании (), если статус нижестоящего конвейера Ожидание ручного действия () из-за ручных заданий. По умолчанию, задания на более поздних этапах не запускаются до тех пор, пока не завершится задание триггера.
      триггер:вперед

      История версий

      • Представлен в GitLab 14.9 с флагом 9.0011 ci_trigger_forward_variables . Отключено по умолчанию.
      • Включено на GitLab.com и самоуправляемо в GitLab 14.10.
      • Общедоступно в GitLab 15.1. Флаг функции ci_trigger_forward_variables удален.

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

      Возможные входы :

      • yaml_variables : true (по умолчанию) или false . Когда true , определены переменные в задании триггера передаются нижестоящим конвейерам.
      • pipe_variables : true или false (по умолчанию). Когда true , ручные переменные конвейера и запланированные переменные конвейера передаются в нисходящие трубопроводы.

      Пример триггера :вперед :

      Запустите этот конвейер вручную с переменная CI/CD MYVAR = мое значение :

       переменных: # переменные по умолчанию для каждого задания
        ВАР: значение
      # Поведение по умолчанию:
      # - VAR передается потомку
      # - MYVAR не передается потомку
      ребенок1:
        курок:
          включают: .child-pipeline.yml
      # Переменные прямого конвейера:
      # - VAR передается потомку
      # - MYVAR передается потомку
      ребенок2:
        курок:
          включают: .child-pipeline.yml
          вперед:
            pipe_variables: правда
      # Не пересылать переменные YAML:
      # - VAR не передается потомку
      # - MYVAR не передается потомку
      ребенок3:
        курок:
          включают: . child-pipeline.yml
          вперед:
            yaml_variables: ложь
       

      переменных

      Переменные CI/CD — это настраиваемые значения, которые передаются заданиям. Используйте переменные для создания пользовательских переменных.

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

      Тип ключевого слова : Глобальное и рабочее ключевое слово. Вы можете использовать его на глобальном уровне, а также на уровне работы.

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

      Возможные входные данные : Пары имени и значения переменной:

      • Имя может использовать только цифры, буквы и знаки подчеркивания ( _ ). В некоторых оболочках первый символ должен быть буквой.
      • Значение должно быть строкой.

      Переменные CI/CD поддерживаются.

      Примеры переменных :

       переменных:
        DEPLOY_SITE: "https://example.com/"
      развертывание_работа:
        этап: развертывание
        сценарий:
          --deploy-script --url $DEPLOY_SITE --path "/"
        среда: производство
      deploy_review_job:
        этап: развертывание
        переменные:
          REVIEW_PATH: "/обзор"
        сценарий:
          --deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH
        среда: производство
       

      Дополнительная информация :

      • Все переменные, определенные YAML, также устанавливаются для любых связанных сервисных контейнеров Docker.
      • Переменные, определенные в YAML, предназначены для неконфиденциальной конфигурации проекта. Хранить конфиденциальную информацию в защищенных переменных или секретах CI/CD.
      • Ручные переменные конвейера и запланированные переменные конвейера по умолчанию не передаются нижестоящим конвейерам. Использовать триггер: вперед для пересылки этих переменных в нижестоящие конвейеры.

      Похожие темы :

      • Вы можете использовать привязки YAML для переменных.
      • Предопределенные переменные — это переменные, которые бегун автоматически создает и делает доступными в задании.
      • Вы можете настроить поведение бегуна с помощью переменных.
      переменные:описание

      Представлено в GitLab 13.7.

      Используйте ключевое слово description для определения предварительно заполненной переменной конвейерного уровня (глобальной). при запуске конвейера вручную.

      Должен использоваться со значением для значения переменной.

      Тип ключевого слова : Глобальное ключевое слово. Вы не можете установить переменные уровня задания для предварительного заполнения при запуске конвейера вручную.

      Возможные входы :

      • Строка.

      Пример переменных: описание :

       переменных:
        РАЗВЕРТЫВАНИЕ_СРЕДЫ:
          значение: "постановка"
          description: "Цель развертывания. При необходимости измените эту переменную на "canary" или "production".
       

      когда

      Используйте вместо , чтобы настроить условия запуска заданий. Если не определено в задании, значение по умолчанию — , когда: on_success .

      Тип ключевого слова : Ключевое слово работы. Вы можете использовать его как часть работы. когда: всегда и когда: никогда также можно использовать в рабочем процессе : правила .

      Возможные входы :

      • on_success (по умолчанию): выполнение задания только в том случае, если все задания на более ранних этапах завершатся успешно. или есть allow_failure: правда .
      • manual : Запуск задания только при ручном запуске.
      • всегда : выполнение задания независимо от состояния заданий на более ранних этапах. Также может использоваться в рабочем процессе : правила .
      • on_failure : Запускать задание только в случае сбоя хотя бы одного задания на более раннем этапе.
      • отложено : Задержка выполнения задания на указанную продолжительность.
      • никогда : Не запускать задание. Можно использовать только в правила раздела или рабочий процесс : правила .

      Пример при :

       ступенях:
        - строить
        - cleanup_build
        - тест
        - развертывать
        - уборка
      build_job:
        этап: сборка
        сценарий:
          - сделать сборку
      cleanup_build_job:
        этап: cleanup_build
        сценарий:
          - сборка очистки при сбое
        когда: on_failure
      test_job:
        этап: тест
        сценарий:
          - сделать тест
      развертывание_работа:
        этап: развертывание
        сценарий:
          - сделать развертывание
        когда: вручную
        среда: производство
      задание_очистки:
        этап: уборка
        сценарий:
          - уборка после работы
        когда: всегда
       

      В этом примере сценарий:

      1. Выполняет cleanup_build_job только в случае сбоя build_job .
      2. Всегда выполняет cleanup_job как последний шаг в конвейере, независимо от успех или неудача.
      3. Выполняет deploy_job , когда вы запускаете его вручную в пользовательском интерфейсе GitLab.

      Дополнительные сведения :

      • В GitLab 13.5 и более поздних версиях вы можно использовать , когда: вручную в том же задании, что и триггер . В GitLab 13.4 и ранее их совместное использование вызывало ошибку jobs:#{job-name}, когда должно быть on_success, on_failure или всегда .
      • Поведение по умолчанию allow_failure меняется на true с , когда: вручную . Однако, если вы используете , когда: вручную с правилами , allow_failure по умолчанию на ложно .

      Похожие темы :

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

      Устаревшие ключевые слова

      Следующие ключевые слова устарели.

      Глобально определенный

      образ , службы , кэш , before_script , after_script

      Определение изображения , сервисов , кэш , before_script и after_script глобально устарел. Поддержка может быть удалена из будущего выпуска.

      Вместо этого используйте по умолчанию . Например:

       по умолчанию:
        изображение: рубин: 3.0
        Сервисы:
          - докер: дин
        кеш:
          пути: [поставщик/]
        до_скрипта:
          - Конфигурация пакета устанавливает путь поставщика/пакета
          - пакетная установка
        после_скрипта:
          -гм -рф тмп/
       

      Как определить хост сценария по умолчанию на компьютере перед запуском сценария?

      Сценарист1

      27 марта 2006 г. 0 0

      Эй, сценарист! Я знаю, что когда я запускаю сценарий, я могу использовать код, чтобы определить, выполняется ли сценарий под управлением WScript или CScript. Что я не могу понять, так это: как я могу определить хост сценария по умолчанию на компьютере до того, как я запущу сценарий?

      — АТ

      Эй, АТ. Вы знаете, не так уж часто люди полностью ставят сценаристов в тупик; однако мы должны признать, что этот вопрос представляет собой некоторую проблему. (Хорошо, хорошо: так что, может быть, это не , что трудно поставить в тупик сценаристов; если честно, это на самом деле довольно легко. Но вам, ребята, не нужно это знать.) Мы понятия не имели, как ответить на этот вопрос, и мы знали, что потребуется много тяжелой работы и самоотверженности, чтобы помочь вам с этим.

      Но сдались ли сценаристы перед лицом невзгод? Ну, собственно, мы и сделали. Однако, занимаясь чем-то совершенно не связанным, мы случайно наткнулись на ответ. Здесь, используя несколько окольную методологию, приведен сценарий, который сообщит вам хост сценария по умолчанию на компьютере:

       Константа HKEY_CLASSES_ROOT = &H80000000
       

      стрКомпьютер = «. »

      Установить objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

      strKeyPath = "VBSFile\Shell\Open\Command" objRegistry.GetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath,vbNullString,strValue

      strValue = LCase(strValue)

      Если InStr(strValue, «wscript.exe»), то Wscript.Echo «WScript» Еще Wscript.Echo «CScript» Конец, если

      Как выяснилось, информация о хосте сценария по умолчанию хранится в реестре, хотя и не в особо очевидном месте. Что вам нужно сделать, так это открыть HKEY_CLASSES_ROOT, найти раздел реестра VBSFile\Shell\Open\Command и посмотреть значение по умолчанию. (Значение по умолчанию — безымянное значение реестра, которое отображается как (по умолчанию) в Regedit.) Значение (по умолчанию) будет путем к исполняемому файлу узла сценария (например, %SystemRoot%\System32\ WScript.exe). В свою очередь, исполняемый файл сообщает вам, является ли хост сценария по умолчанию CScript или WScript.

      Так как же нам получить это значение? Начнем с определения константы с именем HKEY_CLASSES_ROOT и установки значения &H80000000; который сообщает сценарию, с каким кустом реестра мы хотим работать. Затем мы подключаемся к службе WMI на локальном компьютере (хотя мы могли бы так же легко запустить этот скрипт на удаленной машине), заботясь о привязке к пространству имен root\default . (Большинство сценариев WMI используют пространство имен root\cimv2, но по какой-то причине поставщик системного реестра вместо этого находится в root\default. Вероятно, более дешевое жилье или лучшие школы.)

      После установления соединения мы создаем переменную с именем strKeyPath, присваивая ей значение VBSFile\Shell\Open\Command. В этот момент мы готовы прочитать значение из реестра.

      Что это? Мы ничего не забыли? Нет, мы ничего не забыли. (Хотя теперь, когда вы упомянули об этом, мы начинаем задаваться вопросом, выключил ли кто-нибудь плиту, когда мы вышли из дома этим утром. ) Вы правы, что в большинстве сценариев реестра WMI нам нужно было бы присвоить значения два переменных, одна для представления ключа реестра, другая для представления желаемого значения в этом разделе реестра. Однако в этом случае нам не нужно создавать переменную для хранения имени значения реестра. Почему бы и нет? Потому что технически значения (по умолчанию) на самом деле не имеют имени; это просто значения по умолчанию. Что мы в конечном итоге сделаем, так это скажем скрипту прочитать значение Null из этого конкретного раздела реестра. Это не очень хороший план, но, к счастью, поставщик реестра будет знать, что это означает чтение значения (по умолчанию).

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

       objRegistry.GetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath,vbNullString,strValue
       

      Поскольку (по умолчанию) имеет тип данных REG_EXPAND_SZ, мы вызываем метод GetExpandedStringValue , передавая четыре параметра:

      HKEY_CLASSES_ROOT , константа, которая сообщает сценарию, с каким кустом реестра работать.

      strKeyPath , переменная, которая сообщает сценарию, с каким ключом реестра работать.

      vbNullString , константа VBScript, представляющая значение Null. Здесь мы обычно вставляем переменную, представляющую имя значения, но, как мы уже отмечали, на этот раз наше значение не имеет имени.

      strValue , «выходной» параметр. GetExpandedStringValue нуждается в месте для хранения значения, которое он считывает из реестра; параметр out — это просто переменная-заполнитель, в которой это значение может быть спрятано.

      Как только GetExpandedStringValue делает свое дело, мы используем эту строку кода, чтобы изменить все символы в strValue на строчные; мы делаем это, чтобы было проще определить, содержит ли значение конкретную строку или нет:

       strValue = LCase(strValue)
       

      Наконец, мы вызываем функцию InStr и проверяем, можно ли найти строковое значение wscript. exe где-нибудь в пределах strValue. Если это возможно, то мы повторяем тот факт, что хостом сценария по умолчанию является WScript; если это невозможно, то это должно означать, что хостом сценария по умолчанию является CScript:

      . Если InStr(strValue, «wscript.exe»), то
          Wscript.Echo «WScript»
      Еще
          Wscript.Echo «CScript»
      Конец, если
       

      Итак, готово, AT: теперь вы можете определить хост сценария по умолчанию на компьютере без запуска сценария. (Да, мы знаем, что вы должны запустить сценарий, который определяет хост сценария по умолчанию… но вы поняли.) Мы надеемся, что вы найдете это полезным, и мы надеемся, что все сегодня усвоили важный урок: как бы вы ни старались, вы не может поставить в тупик сценаристов.

      Ну, если только вы не зададите нам вопрос, на который мы не сможем ответить. Но вам никогда не поставить нас в тупик, задав вопрос, на который мы можем ответить.

      OK: почти никогда.

      Опубликовано в ScriptingTagged Реестр операционной системы управления рабочим столом, работающей под управлением Scripting Guy! методы написания сценариев VBScript

      Основы сценариев сборки

      Эта глава знакомит вас с основами написания сценариев сборки Gradle. Он использует игрушечные примеры для объяснения основных функций Gradle, что полезно для понимания основных концепций. Особенно, если вы переходите на Gradle с других инструментов сборки, таких как Ant, и хотите понять различия и преимущества.

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

      Каждая сборка Gradle состоит из одного или нескольких проектов . То, что представляет собой проект, зависит от того, что вы делаете с Gradle. Например, проект может представлять JAR-файл библиотеки или веб-приложение. Это может быть ZIP-файл дистрибутива, собранный из JAR-файлов, созданных другими проектами. Проект не обязательно представляет вещь, которую нужно построить. Это может быть что-то, что нужно сделать, например, развертывание вашего приложения в промежуточной или производственной среде. Не беспокойтесь, если это пока кажется немного расплывчатым. Поддержка сборки по соглашению в Gradle добавляет более конкретное определение того, что такое проект.

      Работа, которую Gradle может выполнять над проектом, определяется одной или несколькими задачами . Задача представляет собой некую атомарную часть работы, которую выполняет сборка. Это может быть компиляция некоторых классов, создание JAR-файла, создание Javadoc или публикация некоторых архивов в репозитории.

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

      Вы запускаете сборку Gradle с помощью команды gradle . Команда gradle ищет файл с именем build.gradle в текущем каталоге. [1] Мы называем этот файл build.gradle скриптом сборки , хотя, строго говоря, это скрипт конфигурации сборки, как мы увидим позже. Сценарий сборки определяет проект и его задачи.

      Чтобы попробовать это, создайте следующий скрипт сборки с именем build.gradle .

      Вы запускаете сборку Gradle с помощью команды gradle . Команда gradle ищет файл с именем build.gradle.kts в текущем каталоге. [2] Мы называем этот файл build.gradle.kts скриптом сборки , хотя, строго говоря, это скрипт конфигурации сборки, как мы увидим позже. Сценарий сборки определяет проект и его задачи.

      Чтобы попробовать это, создайте следующий скрипт сборки с именем build.gradle.kts .

      Пример 1. Ваш первый скрипт сборки

      build.gradle

       tasks.register('hello') {
          сделатьпоследний {
              println 'Привет, мир!'
          }
      } 

      build.gradle.kts

       tasks.register("привет") {
          сделатьпоследний {
              println("Привет, мир!")
          }
      } 

      В оболочке командной строки перейдите в содержащий каталог и выполните скрипт сборки с помощью gradle -q hello :

      Что означает -q делать?

      Большинство примеров в этом руководстве пользователя запускаются с параметром командной строки -q . Это подавляет сообщения журнала Gradle, так что отображаются только результаты задач. Это делает вывод примера в этом руководстве пользователя немного яснее. Вам не нужно использовать эту опцию, если вы этого не хотите. См. Ведение журнала для получения более подробной информации об параметрах командной строки, которые влияют на вывод Gradle.

      Пример 2. Выполнение скрипта сборки

      Вывод gradle -q привет

       > gradle -q привет
      Привет, мир! 

      Что здесь происходит? Этот сценарий сборки определяет одну задачу с именем hello и добавляет к ней действие. Когда вы запускаете gradle hello , Gradle выполняет задачу hello , которая, в свою очередь, выполняет указанное вами действие. Действие — это просто блок, содержащий некоторый код для выполнения.

      Если вы думаете, что это похоже на цели Муравья, вы правы. Задачи Gradle эквивалентны целям Ant, но, как вы увидите, они намного мощнее. Мы использовали терминологию, отличную от Ant, поскольку мы думаем, что слово задание более выразительно, чем слово задание . К сожалению, это приводит к несоответствию терминологии с Ant, поскольку Ant называет свои команды, такие как javac или copy , задачами. Поэтому, когда мы говорим о задачах, мы всегда под подразумеваем задачи Gradle, которые эквивалентны целям Ant. Если мы говорим о задачах Ant (командах Ant), мы явно говорим Задача Ant .

      Сценарии сборки Gradle дают вам всю мощь Groovy и Kotlin. В качестве закуски взгляните на это:

      Пример 3. Использование Groovy или Kotlin в задачах Gradle

      build.gradle

       tasks.register('upper') {
          сделатьпоследний {
              Строка someString = 'mY_nAmE'
              println "Оригинал: $someString"
              println "Верхний регистр: ${someString.toUpperCase()}"
          }
      } 

      build.gradle.kts

       tasks. register("верхний") {
          сделатьпоследний {
              val someString = "mY_nAmE"
              println("Оригинал: $someString")
              println("Верхний регистр: ${someString.toUpperCase()}")
          }
      } 

      Вывод gradle -q upper

       > gradle -q upper
      Оригинал: myY_nAmE
      Верхний регистр: MY_NAME 

      или

      Пример 4. Использование Groovy или Kotlin в задачах Gradle

      build.gradle

       tasks.register('count') {
          сделатьпоследний {
              4.time {напечатать "$it" }
          }
      } 

      build.gradle.kts

       tasks.register("количество") {
          сделатьпоследний {
              повторить (4) { печать («$ это») }
          }
      } 

      Вывод gradle -q count

       > количество градиентов -q
      0 1 2 3 

      Как вы, наверное, догадались, вы можете объявлять задачи, зависящие от других задач.

      Пример 5. Объявление задачи, зависящей от другой задачи

      build.gradle

       tasks.register('hello') {
          сделатьпоследний {
              println 'Привет, мир!'
          }
      }
      tasks.register('введение') {
          зависит от задач.привет
          сделатьпоследний {
              println "Я Грейдл"
          }
      } 

      build.gradle.kts

       tasks.register("привет") {
          сделатьпоследний {
              println("Привет, мир!")
          }
      }
      tasks.register("введение") {
          зависит от ("привет")
          сделатьпоследний {
              println("Я Грейдл")
          }
      } 

      Вывод gradle -q введение

       > gradle -q введение
      Привет, мир!
      Я Gradle 

      Чтобы добавить зависимость, соответствующая задача не должна существовать.

      Пример 6. Lazy dependOn — другая задача не существует (пока)

      build.gradle

       tasks.register('taskX') {
          зависит от «задачи»
          сделатьпоследний {
              println 'задачаX'
          }
      }
      tasks. register('задачаY') {
          сделатьпоследний {
              println 'задача'
          }
      } 

      build.gradle.kts

       tasks.register("taskX") {
          зависит от ("задача")
          сделатьпоследний {
              println("задачаX")
          }
      }
      tasks.register("задачаY") {
          сделатьпоследний {
              println("задача")
          }
      } 

      Вывод gradle -q taskX

       > gradle -q taskX
      задачаY
      taskX 

      Зависимость taskX от taskY может быть объявлена ​​до определения taskY . Зависимости задач более подробно обсуждаются в разделе Добавление зависимостей к задаче.

      Возможности Groovy или Kotlin можно использовать не только для определения того, что делает задача. Например, вы можете использовать его для регистрации нескольких задач одного типа в цикле.

      Пример 7. Гибкая регистрация задачи

      build.gradle

       4.times { counter ->
          tasks. register("задача$счетчик") {
              сделатьпоследний {
                  println "Я номер задачи $counter"
              }
          }
      } 

      build.gradle.kts

       повтор(4) { счетчик ->
          tasks.register("задача$счетчик") {
              сделатьпоследний {
                  println("Я номер задачи $counter")
              }
          }
      } 

      Вывод gradle -q task1

       > gradle -q task1
      Я задача номер 1 

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

      Пример 8. Доступ к задаче через API — добавление зависимости

      build.gradle

       4.times { counter ->
          tasks.register("задача$счетчик") {
              сделатьпоследний {
                  println "Я номер задачи $counter"
              }
          }
      }
      tasks. named('задача0') { зависит от('задача2', 'задача3') } 

      build.gradle.kts

       повтор (4) { счетчик ->
          tasks.register("задача$счетчик") {
              сделатьпоследний {
                  println("Я номер задачи $counter")
              }
          }
      }
      tasks.named("task0") { dependOn("task2", "task3") } 

      Вывод gradle -q task0

       > gradle -q task0
      я задача номер 2
      я задача номер 3
      Я номер задачи 0 

      Или вы можете добавить поведение к существующей задаче.

      Пример 9. Доступ к задаче через API — добавление поведения

      build.gradle

       tasks.register («привет») {
          сделатьпоследний {
              println «Здравствуй, Земля»
          }
      }
      tasks.named('привет') {
          сделатьпервый {
              println 'Привет, Венера'
          }
      }
      tasks.named('привет') {
          сделатьпоследний {
              println 'Привет, Марс'
          }
      }
      tasks.named('привет') {
          сделатьпоследний {
              println 'Привет, Юпитер'
          }
      } 

      build. gradle.kts

       tasks.register("привет") {
          сделатьпоследний {
              println("Здравствуй Земля")
          }
      }
      tasks.named("привет") {
          сделатьпервый {
              println("Привет, Венера")
          }
      }
      tasks.named("привет") {
          сделатьпоследний {
              println("Привет, Марс")
          }
      }
      tasks.named("привет") {
          сделатьпоследний {
              println("Привет, Юпитер")
          }
      } 

      Вывод gradle -q привет

       > gradle -q привет
      Привет Венера
      Привет Земля
      Привет Марс
      Hello Jupiter 

      Вызовы doFirst и doLast могут выполняться несколько раз. Они добавляют действие в начало или конец списка действий задачи. При выполнении задачи действия в списке действий выполняются по порядку.

      Задачи Ant являются первоклассными гражданами в Gradle. Gradle обеспечивает отличную интеграцию для задач Ant, просто полагаясь на Groovy. Groovy поставляется с фантастическими AntBuilder . Использование задач Ant из Gradle так же удобно и мощнее, чем использование задач Ant из файла build.xml . И его можно использовать и из Котлина. Из приведенного ниже примера вы узнаете, как выполнять задачи Ant и как получить доступ к свойствам Ant:

      Пример 10. Использование AntBuilder для выполнения ant.loadfile target

      build.gradle

       tasks.register('loadfile') {
          сделатьпоследний {
              def files = файл('./antLoadfileResources').listFiles().sort()
              files.each { Файл файл ->
                  если (файл.isFile()) {
                      ant.loadfile(srcFile: файл, свойство: file.name)
                      println "*** $file.name ***"
                      println "${ant.properties[file.name]}"
                  }
              }
          }
      } 

      build.gradle.kts

       tasks.register («файл загрузки») {
          сделатьпоследний {
              val files = файл("./antLoadfileResources").listFiles().sorted()
              files.forEach {файл ->
                  если (файл. isFile) {
                      ant.withGroovyBuilder {
                          "loadfile" ("srcFile" в файл, "property" в файл.имя)
                      }
                      println(" *** ${имя_файла} ***")
                      println("${ant.properties[file.name]}")
                  }
              }
          }
      } 

      Вывод gradle -q файл загрузки

       > gradle -q файл загрузки
       *** Agile.manifesto.txt ***
      Люди и взаимодействия важнее процессов и инструментов
      Работающее программное обеспечение над исчерпывающей документацией
      Сотрудничество с клиентами в ходе переговоров по контракту
      Реагирование на изменение вместо следования плану
       *** gradle.manifesto.txt ***
      Сделайте невозможное возможным, сделайте возможное легким и сделайте легкое элегантным.
      (по мотивам Моше Фельденкрайза) 

      С помощью Ant можно делать гораздо больше в своих скриптах сборки. Вы можете узнать больше в Ant.

      Gradle расширяет возможности организации логики сборки. Первый уровень организации логики сборки для приведенного выше примера — это извлечение метода.

      Пример 11. Использование методов для организации логики сборки

      build.gradle

       tasks.register('checksum') {
          сделатьпоследний {
              fileList('./antLoadfileResources').each { Файл файл ->
                  ant.checksum (файл: файл, свойство: "cs_$file.name")
                  println "$file.name Контрольная сумма: ${ant.properties["cs_$file.name"]}"
              }
          }
      }
      tasks.register('loadfile') {
          сделатьпоследний {
              fileList('./antLoadfileResources').each { Файл файл ->
                  ant.loadfile(srcFile: файл, свойство: file.name)
                  println "Мне нравится $file.name"
              }
          }
      }
      File[] fileList(String dir) {
          файл(каталог).listFiles({file -> file.isFile() } as FileFilter).sort()
      } 

      build.gradle.kts

       tasks.register («контрольная сумма») {
          сделатьпоследний {
              список_файлов("./antLoadfileResources"). forEach { файл ->
                  ant.withGroovyBuilder {
                      "контрольная сумма" ("файл" в файл, "свойство" в "cs_${file.name}")
                  }
                  println("Контрольная сумма $file.name: ${ant.properties["cs_${file.name}"]}")
              }
          }
      }
      tasks.register("loadfile") {
          сделатьпоследний {
              список_файлов("./antLoadfileResources").forEach { файл ->
                  ant.withGroovyBuilder {
                      "loadfile" ("srcFile" в файл, "property" в файл.имя)
                  }
                  println("Мне нравится ${file.name}")
              }
          }
      }
      fun fileList(dir: String): List =
          file(dir).listFiles { файл: File -> file.isFile }.sorted() 

      Вывод gradle -q loadfile

       > gradle -q loadfile
      Мне нравится agile.manifesto.txt
      Мне нравится gradle.manifesto.txt 

      Позже вы увидите, что такие методы могут быть общими для подпроектов в многопроектных сборках. Если ваша логика сборки становится более сложной, Gradle предлагает вам другие очень удобные способы ее организации. Мы посвятили этому целую главу. См. раздел Организация проектов Gradle.

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

      Пример 12. Определение задачи по умолчанию

      build.gradle

       defaultTasks 'clean', 'run'
      tasks.register('очистить') {
          сделатьпоследний {
              println 'Очистка по умолчанию!'
          }
      }
      tasks.register('выполнить') {
          сделатьпоследний {
              println 'Выполняется по умолчанию!'
          }
      }
      tasks.register('другое') {
          сделатьпоследний {
              println "Я не задача по умолчанию!"
          }
      } 

      build.gradle.kts

       defaultTasks («очистить», «запустить»)
      tasks.register ("очистить") {
          сделатьпоследний {
              println("Очистка по умолчанию!")
          }
      }
      tasks.register("выполнить") {
          сделатьпоследний {
              println("Выполняется по умолчанию!")
          }
      }
      tasks.register("другое") {
          сделатьпоследний {
              println("Я не задача по умолчанию!")
          }
      } 

      Вывод gradle -q

       > gradle -q
      Очистка по умолчанию!
      По умолчанию работает! 

      Это эквивалентно запуску gradle clean run . В многопроектной сборке каждый подпроект может иметь свои собственные задачи по умолчанию. Если в подпроекте не указаны задачи по умолчанию, используются задачи по умолчанию родительского проекта (если они определены).

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

      Если вашему скрипту сборки необходимо использовать внешние библиотеки, вы можете добавить их в путь к классам скрипта в самом скрипте сборки. Вы делаете это с помощью метода buildscript() , передавая блок, который объявляет путь к классам скрипта сборки.

      Пример 13. Объявление внешних зависимостей для скрипта сборки

      build.gradle

       buildscript {
          репозитории {
              mavenCentral()
          }
          зависимости {
              группа classpath: 'commons-codec', имя: 'commons-codec', версия: '1. 2'
          }
      } 

      build.gradle.kts

       скрипт сборки {
          репозитории {
              mavenCentral()
          }
          зависимости {
              "classpath" (group = "commons-codec", name = "commons-codec", version = "1.2")
          }
      } 

      Блок, переданный методу buildscript() , настраивает экземпляр ScriptHandler. Вы объявляете путь к классам сценария сборки, добавляя зависимости к конфигурации пути к классам . Таким же образом вы объявляете, например, путь к классам компиляции Java. Вы можете использовать любой из типов зависимостей, кроме зависимостей проекта.

      Объявив путь к классам сценария сборки, вы можете использовать классы в своем сценарии сборки, как и любые другие классы в пути к классам. Следующий пример дополняет предыдущий и использует классы из пути к классам скрипта сборки.

      Пример 14. Сценарий сборки с внешними зависимостями

      build.gradle

       import org.apache.commons.codec.binary. Base64
      скрипт сборки {
          репозитории {
              mavenCentral()
          }
          зависимости {
              группа classpath: 'commons-codec', имя: 'commons-codec', версия: '1.2'
          }
      }
      tasks.register('кодировать') {
          сделатьпоследний {
              def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
              println новая строка (encodedString)
          }
      } 

      build.gradle.kts

       импорт org.apache.commons.codec.binary.Base64
      скрипт сборки {
          репозитории {
              mavenCentral()
          }
          зависимости {
              "classpath" (group = "commons-codec", name = "commons-codec", version = "1.2")
          }
      }
      tasks.register("кодировать") {
          сделатьпоследний {
              val encodedString = Base64().encode("привет, мир\n".toByteArray())
              println (строка (закодированная строка))
          }
      } 

      Вывод gradle -q encode

       > кодировать gradle -q
      aGVsbG8gd29ybGQK 

      Для мультипроектных сборок зависимости, объявленные с помощью метода buildscript() проекта, доступны для скриптов сборки всех его подпроектов.

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

      Каждый проект автоматически имеет задачу buildEnvironment типа BuildEnvironmentReportTask, которую можно вызвать для отчета о разрешении зависимостей сценария сборки.

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

      • Создание поддерживаемых сценариев сборки

      • Организация проектов Gradle

      • Написание пользовательских задач


      1. Существуют переключатели командной строки для изменения этого поведения. См. Интерфейс командной строки

      2. Существуют переключатели командной строки для изменения этого поведения. См. Интерфейс командной строки

      vue.js — Как экспортировать значения по умолчанию из внутренней настройки скрипта в Vue 3?

      Оператор экспорта по умолчанию не работает внутри <настройка сценария> .

      Если я попытаюсь экспортировать его в test.vue :