как увеличить скорость загрузки страницы со скриптами с помощью 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>
.
Распространенное решение проблемы — перенос скрипта в нижнюю часть страницы, перед закрывающим тегом
. В этом случае скрипт выполняется после того, как вся страница уже проанализирована до тега.
Это лучшее решение по ускорению загрузки страницы для старых браузеров, которые не поддерживают атрибуты 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
При написании сценария:
<script src="script.js"></script>
Нет
defer
Илиasync
, Браузер загрузит и выполнит указанный скрипт немедленно, «немедленно» означает, чтоscript
Перед элементом документа под тегом, то есть без ожидания загрузки элемента документа позже, он загружается и выполняется при чтении.<script async src="script.js"></script>
Есть
async
, Процесс загрузки и отрисовки последующих элементов документа будет таким жеscript.js
Загрузка и выполнение выполняются параллельно (асинхронно).<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)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
900411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111. 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
, он не запускается.
На другом этапе должна быть хотя бы одна другая работа. .до
и .после
этапов
может использоваться в требуемой конфигурации конвейера
для определения заданий соответствия, которые должны выполняться до или после заданий конвейера проекта.
Тип ключевого слова : Глобальное ключевое слово.
Пример ступеней
:
ступеней: - строить - тест - развертывать
В этом примере:
- Все задания в сборке
- Если все задания в сборке выполнены успешно, задания
test
выполняются параллельно. - Если все задания в
test
завершаются успешно, заданияdeploy
выполняются параллельно. - Если все задания в
развертывании
выполнены успешно, конвейер помечается какпереданный
.
В случае сбоя какого-либо задания конвейер помечается как 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
.
- В GitLab Runner 13. 0 и более поздних версиях
Пример артефактов: пути
:
задание: артефакты: пути: - двоичные файлы/ - .конфиг
В этом примере создается артефакт с .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
-
. Выставляйте артефакты задания в пользовательском интерфейсе мерж-реквеста.
Артефакты
:название
Используйте ключевое слово
артефакты: имя
, чтобы определить имя созданных артефактов. архив. Вы можете указать уникальное имя для каждого архива.Если не указано, имя по умолчанию —
артефакты
, которое при загрузке становитсяартефактов.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 и более ранних версиях
путь к файлу.Соответствует
.
- В GitLab Runner 13.0 и более поздних версиях
Пример
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+/'
В этом примере:
- GitLab проверяет журнал заданий на соответствие регулярному выражению. Линия
как
Покрытие кода: 67,89% строк, покрытых
, совпадут. - Затем 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
:
: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характеристика-.*/ .
Следующие ключевые слова:
Значение | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
API | 9045.|||||||||||||
ветвей | Когда ссылка Git для конвейера является ветвью. | ||||||||||||
chat | Для конвейеров, созданных с помощью команды GitLab ChatOps. | ||||||||||||
внешний | При использовании CI-сервисов, отличных от GitLab. | ||||||||||||
external_pull_requests | При создании или обновлении внешнего запроса на включение в GitHub (см. Конвейеры для внешних запросов на вытягивание). | ||||||||||||
merge_requests | Для конвейеров, созданных при создании или обновлении запроса на слияние. Включает конвейеры запросов на слияние, конвейеры объединенных результатов и поезда слияния. | ||||||||||||
конвейеры | Для многопроектных конвейеров, созданных с помощью API с CI_JOB_TOKEN или ключевого слова триггера . | ||||||||||||
pushs | Для конвейеров, запускаемых событием git push , в том числе для ветвей и тегов. | ||||||||||||
расписания | Для запланированных трубопроводов. | ||||||||||||
теги | Когда ссылка Git для конвейера является тегом. 9стабильная ветвь.*$/
- расписания Дополнительные сведения :
Только: переменные / кроме: переменные Используйте ключевые слова Только Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Пример только развертывание: скрипт: деплой промежуточной шапки Только: переменные: - $RELEASE == "постановка" - $ ПОСТАНОВКА Похожие темы :
Только: изменения / кроме: изменения Используйте ключевое слово Использовать
Только Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Массив, включающий любое количество:
Пример только сборка докера: скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG . Только: ссылки: - ветви изменения: - Докерфайл - докер/скрипты/* - файлы докеров/**/* - more_scripts/*.{rb,py,sh} - "**/*.json" Дополнительные детали :
Похожие темы :
Только: kubernetes / кроме: kubernetes Используйте только Только Тип ключевого слова : Специально для работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Пример только развертывание: Только: Кубернетес: активен В этом примере задание развертывания страниц Используйте Тип ключевого слова : Имя задания. Пример страниц: этап: развертывание сценарий: - mkdir .public -cp -r * .public - mv .public общественность артефакты: пути: - общественный правила: - если: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH среда: производство В этом примере все файлы перемещаются из корня проекта в каталог Дополнительные сведения : Необходимо:
параллельно Используйте Должно существовать несколько исполнителей или одно средство выполнения должно быть настроено для одновременного запуска нескольких заданий. Параллельные задания именуются последовательно от Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример тест: сценарий: rspec параллельно: 5 В этом примере создается 5 параллельно выполняемых заданий с именем Дополнительные сведения :
Похожие темы :
параллель:матрица История версий
Используйте Должно существовать несколько исполнителей или одно средство выполнения должно быть настроено для одновременного запуска нескольких заданий. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Массив хэшей переменных:
Пример deploystacks: этап: развертывание сценарий: - бин/развернуть параллельно: матрица: - ПРОВАЙДЕР: aws КУЧА: - мониторинг - приложение1 - приложение2 - ПРОВАЙДЕР: ovh СТЕК: [мониторинг, резервное копирование, приложение] - ПРОВАЙДЕР: [gcp, vultr] СТЕК: [данные, обработка] среда: $PROVIDER/$STACK В этом примере создается 10 параллельных заданий deploystacks: [aws, мониторинг] развертывание стеков: [aws, app1] развертывание стеков: [aws, app2] deploystacks: [ovh, мониторинг] deploystacks: [ovh, резервная копия] развертывание стеков: [ovh, приложение] развертывание стеков: [gcp, данные] deploystacks: [gcp, обработка] развертывание стеков: [vultr, данные] deploystacks: [vultr, обработка] Похожие темы :
выпуск Представлено в GitLab 13.2. Используйте версию Задание выпуска должно иметь доступ к Если вы используете исполнителя Docker,
вы можете использовать этот образ из реестра контейнеров GitLab: Если вы используете исполняющую программу Shell или аналогичную,
установить Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы : Подключи версии
Пример ключевого слова выпуска 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 для релиза. Если тег еще не существует в проекте, он создается одновременно с выпуском. Новые теги используют SHA, связанный с конвейером. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Поддерживаются переменные CI/CD. Пример Для создания релиза при добавлении в проект нового тега:
работа: 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_job: этап: релиз выпускать: имя_тега: $CI_COMMIT_TAG description: 'Описание релиза' tag_message: 'Аннотированное сообщение тега' Версия: имя Название выпуска. Если он опущен, он заполняется значением выпуска Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример релиз_работа: этап: релиз выпускать: имя: 'Выпустить $CI_COMMIT_TAG' Выпуск: описание Подробное описание релиза. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример выпуска задание: выпускать: tag_name: ${MAJOR}_${MINOR}_${REVISION} описание: './path/to/CHANGELOG.md' Выпуск: ссылка Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Выпуск: вехи Название каждой вехи, с которой связан выпуск. Выпуск:released_at Дата и время готовности релиза. Возможные значения :
Пример выпуска Release_at: '2021-03-15T08:00:00Z' Дополнительные сведения :
выпуск:активы:ссылки Представлено в GitLab 13.12. Используйте Требуется Пример выпуска активы: ссылки: - имя: 'актив1' URL-адрес: https://example. com/assets/1. - имя: 'актив2' URL-адрес: «https://example.com/assets/2» путь к файлу: '/pretty/url/1' # необязательно link_type: 'другое' # необязательно группа_ресурсов Представлено в GitLab 12.7. Используйте Например, если несколько заданий, принадлежащих к одной и той же группе ресурсов, одновременно поставлены в очередь,
запускается только одно из заданий. Другие задания ждут, пока Группы ресурсов ведут себя аналогично семафорам в других языках программирования. Для каждой среды можно определить несколько групп ресурсов. Например, при развертывании на физические устройства у вас может быть несколько физических устройств. Каждое устройство может быть развернут, но только одно развертывание может произойти на устройство в любой момент времени. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример развертывание в рабочей среде: сценарий: развернуть группа_ресурсов: производство В этом примере два задания Похожие темы :
повторить попытку Используйте При сбое задания оно обрабатывается еще два раза до тех пор, пока оно не завершится успешно или достигает максимального количества повторных попыток. По умолчанию все типы сбоев вызывают повторную попытку задания. Использовать Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в Возможные входы :
Пример повторной попытки теста: сценарий: rspec повторить: 2 повтор: когда Используйте повторную попытку Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в Возможные входы :
Пример повторной попытки тест: сценарий: rspec повторить: макс: 2 когда: runner_system_failure В случае сбоя, отличного от сбоя системы бегуна, задание не повторяется. Пример повторной попытки тест: сценарий: rspec повторить: макс: 2 когда: - runner_system_failure - застрял_or_timeout_failure Связанные темы : Можно указать количество повторных попыток для определенных этапов выполнения задания. используя переменные. правила Представлено в GitLab 12.3. Используйте правила Правила оцениваются при создании конвейера и оцениваются в порядке до первого матча. Когда совпадение найдено, задание либо включается, либо исключается из конвейера. в зависимости от конфигурации. Переменные dotenv, созданные в сценариях заданий, нельзя использовать в правилах, поскольку правила оцениваются перед выполнением любых заданий.
Вы можете комбинировать несколько ключевых слов для сложных правил. Задание добавлено в конвейер:
Задание не добавлено в конвейер:
Вы можете использовать теги правила:если Используйте правила
Тип ключевого слова : зависит от задания и конвейера. Вы можете использовать его как часть работы для настройки поведения задания или с помощью 9особенность/ когда: вручную allow_failure: правда - если: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME Дополнительные сведения :
Похожие темы :
правил:изменений Используйте правила Вы должны использовать правила Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Пример правил сборка докера: скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG . правила: - если: $CI_PIPELINE_SOURCE == "merge_request_event" изменения: - Докерфайл когда: вручную allow_failure: правда
Дополнительная информация :
Похожие темы :
правила:изменения:пути Представлено в GitLab 15. 2. Используйте правила Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Пример докер-сборка-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 с флагом Используйте Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть задания, и он должен быть объединен с Возможные входы :
Пример docker build: скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG . правила: - если: $CI_PIPELINE_SOURCE == "merge_request_event" изменения: пути: - Докерфайл compare_to: 'refs/heads/branch2' В этом примере задание правил:существует Представлено в GitLab 12.4. Используйте Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные :
Пример правил задание: скрипт: docker build -t my-image:$CI_COMMIT_REF_SLUG . правила: - существуют: - Докерфайл Дополнительные сведения :
правила:allow_failure Представлено в GitLab 12.8. Используйте Вы также можете использовать Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример правил задание: script: echo "Привет, Правила!" правила: - если: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH когда: вручную allow_failure: правда Если правило соответствует, то задание выполняется вручную с Дополнительные сведения :
правила: переменные История версий
Используйте переменные Тип ключевого слова : Специально для работы. Вы можете использовать его только как часть работы. Возможные входы :
Пример правил задание: переменные: 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 существует" скрипт Используйте сценарий Для всех заданий, кроме триггерных, требуется ключевое слово сценария Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Массив, включающий:
Поддерживаются переменные CI/CD. Пример сценария задание 1: скрипт: "комплект exec rspec" задание2: сценарий: - имя-а - пакет exec rspec Дополнительная информация :
Связанные Топы : 2 . Представлено в GitLab 13.4. Используйте секреты Это ключевое слово должно использоваться с Представлен в GitLab 13.4 и GitLab Runner 13.4. Используйте Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы : Пример Чтобы явно указать все детали и использовать механизм секретов KV-V2: Вы можете сократить этот синтаксис. С коротким синтаксисом Чтобы указать в коротком синтаксисе путь к механизму пользовательских секретов, добавьте суффикс, начинающийся с Представлен в GitLab 14. 1 и GitLab Runner 14.1. Используйте По умолчанию секрет передается заданию как Если ваше программное обеспечение не может использовать переменные CI/CD типа Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы : Пример Дополнительные сведения : Используйте службы Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в Возможные входные данные : имя образа службы, включая путь реестра, если необходимо, в одном из следующих форматов: Переменные CI/CD поддерживаются, но не для псевдонима Пример службы В этом примере задание запускает контейнер Ruby. Затем из этого контейнера запускается задание
другой контейнер, на котором работает PostgreSQL. Затем задание запускает сценарии
в этом контейнере. Похожие темы : История версий Политика извлечения, используемая исполнителем для получения образа Docker. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть задания или в разделе Возможные входные данные : Примеры Дополнительные сведения : Похожие темы : Используйте Если Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Массив, включающий любое количество имен этапов. Сценические имена могут быть: Пример столика Дополнительные сведения : Представлено в GitLab 12.4. Используйте этап Если конвейер содержит только задания на этапах Тип ключевого слова : Вы можете использовать его только с ключевым словом задания Пример стадии Представлено в GitLab 12.4. Используйте этап Если конвейер содержит только задания на этапах Тип ключевого слова : Вы можете использовать его только с ключевым словом задания Пример стадии История версий Используйте теги При регистрации бегуна можно указать теги бегуна, для
пример Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в Возможные входные данные : Пример тегов В этом примере только бегуны с и и Дополнительные сведения : Похожие темы : Представлено в GitLab 12.3. Использовать тайм-аут Время ожидания на уровне задания может превышать время ожидания на уровне проекта.
но не может быть больше тайм-аута бегуна. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы или в Возможные входные данные : Период времени, записанный на естественном языке. Например, все они эквивалентны: Пример таймаута Используйте триггер Триггерные задания могут использовать только ограниченный набор ключевых слов конфигурации GitLab CI/CD.
Ключевые слова, доступные для использования в триггерных заданиях: Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Пример триггера Дополнительные сведения : Похожие темы : Используйте триггер Используйте Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входные данные : Пример триггера Похожие темы : Используйте триггер По умолчанию многопроектный конвейер запускается для ветви по умолчанию. Используйте 9Триггер 0011:ветвь чтобы указать другую ветвь. Тип ключевого слова : Ключевое слово работы. Вы можете использовать его только как часть работы. Возможные входы : Пример триггера Пример триггера Похожие темы : Используйте триггер Это поведение отличается от поведения по умолчанию, которое заключается в том, что задание триггера Этот параметр делает выполнение конвейера линейным, а не параллельным. Пример триггера В этом примере задания из последующих стадий ожидают запуска запущенного конвейера.
успешно завершить перед началом. Дополнительные детали : История версий Используйте триггер Возможные входы : Пример триггера Запустите этот конвейер вручную с
переменная CI/CD Переменные CI/CD — это настраиваемые значения, которые передаются заданиям.
Используйте переменные Переменные всегда доступны в командах Тип ключевого слова : Глобальное и рабочее ключевое слово. Вы можете использовать его на глобальном уровне,
а также на уровне работы. Если вы определяете Возможные входные данные : Пары имени и значения переменной: Переменные CI/CD поддерживаются. Примеры переменных Дополнительная информация : Похожие темы : Представлено в GitLab 13.7. Используйте ключевое слово Должен использоваться со значением Тип ключевого слова : Глобальное ключевое слово. Вы не можете установить переменные уровня задания для предварительного заполнения при запуске конвейера вручную. Возможные входы : Пример Используйте Тип ключевого слова : Ключевое слово работы. Вы можете использовать его как часть работы. Возможные входы : Пример В этом примере сценарий: Дополнительные сведения : Похожие темы : Следующие ключевые слова устарели. Определение Вместо этого используйте Сценарист1 27 марта 2006 г. 0 0 Эй, сценарист! Я знаю, что когда я запускаю сценарий, я могу использовать код, чтобы определить, выполняется ли сценарий под управлением WScript или CScript. Что я не могу понять, так это: как я могу определить хост сценария по умолчанию на компьютере до того, как я запущу сценарий? — АТ Эй, АТ. Вы знаете, не так уж часто люди полностью ставят сценаристов в тупик; однако мы должны признать, что этот вопрос представляет собой некоторую проблему. (Хорошо, хорошо: так что, может быть, это не , что трудно поставить в тупик сценаристов; если честно, это на самом деле довольно легко. Но вам, ребята, не нужно это знать.) Мы понятия не имели, как ответить на этот вопрос, и мы знали, что потребуется много тяжелой работы и самоотверженности, чтобы помочь вам с этим. Но сдались ли сценаристы перед лицом невзгод? Ну, собственно, мы и сделали. Однако, занимаясь чем-то совершенно не связанным, мы случайно наткнулись на ответ. Здесь, используя несколько окольную методологию, приведен сценарий, который сообщит вам хост сценария по умолчанию на компьютере: стрКомпьютер = «. » Установить 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 из этого конкретного раздела реестра. Это не очень хороший план, но, к счастью, поставщик реестра будет знать, что это означает чтение значения (по умолчанию). На самом деле, пока мы в теме, вот строка кода, которая извлекает для нас значение: Поскольку (по умолчанию) имеет тип данных REG_EXPAND_SZ, мы вызываем метод GetExpandedStringValue , передавая четыре параметра: HKEY_CLASSES_ROOT , константа, которая сообщает сценарию, с каким кустом реестра работать. strKeyPath , переменная, которая сообщает сценарию, с каким ключом реестра работать. vbNullString , константа VBScript, представляющая значение Null. Здесь мы обычно вставляем переменную, представляющую имя значения, но, как мы уже отмечали, на этот раз наше значение не имеет имени. strValue , «выходной» параметр. GetExpandedStringValue нуждается в месте для хранения значения, которое он считывает из реестра; параметр out — это просто переменная-заполнитель, в которой это значение может быть спрятано. Как только GetExpandedStringValue делает свое дело, мы используем эту строку кода, чтобы изменить все символы в strValue на строчные; мы делаем это, чтобы было проще определить, содержит ли значение конкретную строку или нет: Наконец, мы вызываем функцию InStr и проверяем, можно ли найти строковое значение wscript. exe где-нибудь в пределах strValue. Если это возможно, то мы повторяем тот факт, что хостом сценария по умолчанию является WScript; если это невозможно, то это должно означать, что хостом сценария по умолчанию является CScript: Итак, готово, AT: теперь вы можете определить хост сценария по умолчанию на компьютере без запуска сценария. (Да, мы знаем, что вы должны запустить сценарий, который определяет хост сценария по умолчанию… но вы поняли.) Мы надеемся, что вы найдете это полезным, и мы надеемся, что все сегодня усвоили важный урок: как бы вы ни старались, вы не может поставить в тупик сценаристов. Ну, если только вы не зададите нам вопрос, на который мы не сможем ответить. Но вам никогда не поставить нас в тупик, задав вопрос, на который мы можем ответить. OK: почти никогда. Эта глава знакомит вас с основами написания сценариев сборки Gradle. Он использует игрушечные примеры для объяснения основных функций Gradle, что полезно для понимания основных концепций.
Особенно, если вы переходите на Gradle с других инструментов сборки, таких как Ant, и хотите понять различия и преимущества. Однако, чтобы начать работу со стандартной настройкой проекта, вам даже не нужно подробно вдаваться в эти понятия.
Вместо этого вы можете быстро ознакомиться с нашими пошаговыми примерами. Каждая сборка Gradle состоит из одного или нескольких проектов .
То, что представляет собой проект, зависит от того, что вы делаете с Gradle.
Например, проект может представлять JAR-файл библиотеки или веб-приложение.
Это может быть ZIP-файл дистрибутива, собранный из JAR-файлов, созданных другими проектами.
Проект не обязательно представляет вещь, которую нужно построить.
Это может быть что-то, что нужно сделать, например, развертывание вашего приложения в промежуточной или производственной среде.
Не беспокойтесь, если это пока кажется немного расплывчатым. Поддержка сборки по соглашению в Gradle добавляет более конкретное определение того, что такое проект. Работа, которую Gradle может выполнять над проектом, определяется одной или несколькими задачами .
Задача представляет собой некую атомарную часть работы, которую выполняет сборка.
Это может быть компиляция некоторых классов, создание JAR-файла, создание Javadoc или публикация некоторых архивов в репозитории. Как правило, задачи предоставляются путем применения подключаемого модуля, поэтому вам не нужно определять их самостоятельно.
Тем не менее, чтобы дать вам представление о том, что такое задача, в этой главе мы рассмотрим определение некоторых простых задач в сборке с одним проектом. Вы запускаете сборку Gradle с помощью команды Чтобы попробовать это, создайте следующий скрипт сборки с именем Вы запускаете сборку Gradle с помощью команды Чтобы попробовать это, создайте следующий скрипт сборки с именем Пример 1. Ваш первый скрипт сборки build.gradle build.gradle.kts В оболочке командной строки перейдите в содержащий каталог и выполните скрипт сборки с помощью Что означает Большинство примеров в этом руководстве пользователя запускаются с параметром командной строки Пример 2. Выполнение скрипта сборки Вывод Что здесь происходит? Этот сценарий сборки определяет одну задачу с именем Если вы думаете, что это похоже на цели Муравья, вы правы. Задачи Gradle эквивалентны целям Ant, но, как вы увидите, они намного мощнее. Мы использовали терминологию, отличную от Ant, поскольку мы думаем, что слово задание более выразительно, чем слово задание . К сожалению, это приводит к несоответствию терминологии с Ant, поскольку Ant называет свои команды, такие как Сценарии сборки Gradle дают вам всю мощь Groovy и Kotlin. В качестве закуски взгляните на это: Пример 3. Использование Groovy или Kotlin в задачах Gradle build.gradle build.gradle.kts Вывод или Пример 4. Использование Groovy или Kotlin в задачах Gradle build.gradle build.gradle.kts Вывод Как вы, наверное, догадались, вы можете объявлять задачи, зависящие от других задач. Пример 5. Объявление задачи, зависящей от другой задачи build.gradle build.gradle.kts Вывод Чтобы добавить зависимость, соответствующая задача не должна существовать. Пример 6. Lazy dependOn — другая задача не существует (пока) build.gradle build.gradle.kts Вывод Зависимость Возможности Groovy или Kotlin можно использовать не только для определения того, что делает задача.
Например, вы можете использовать его для регистрации нескольких задач одного типа в цикле. Пример 7. Гибкая регистрация задачи build.gradle build.gradle.kts Вывод После того, как задачи зарегистрированы, к ним можно получить доступ через API .
Например, вы можете использовать это для динамического добавления зависимостей к задаче во время выполнения.
Муравей ничего подобного не допускает. Пример 8. Доступ к задаче через API — добавление зависимости build.gradle build.gradle.kts Вывод Или вы можете добавить поведение к существующей задаче. Пример 9. Доступ к задаче через API — добавление поведения build.gradle build. gradle.kts Вывод Вызовы Задачи Ant являются первоклассными гражданами в Gradle. Gradle обеспечивает отличную интеграцию для задач Ant, просто полагаясь на Groovy. Groovy поставляется с фантастическими Пример 10. Использование AntBuilder для выполнения ant.loadfile target build.gradle build.gradle.kts Вывод С помощью Ant можно делать гораздо больше в своих скриптах сборки. Вы можете узнать больше в Ant. Gradle расширяет возможности организации логики сборки. Первый уровень организации логики сборки для приведенного выше примера — это извлечение метода. Пример 11. Использование методов для организации логики сборки build.gradle build.gradle.kts Вывод Позже вы увидите, что такие методы могут быть общими для подпроектов в многопроектных сборках. Если ваша логика сборки становится более сложной, Gradle предлагает вам другие очень удобные способы ее организации. Мы посвятили этому целую главу. См. раздел Организация проектов Gradle. Gradle позволяет определить одну или несколько задач по умолчанию, которые выполняются, если не указаны другие задачи. Пример 12. Определение задачи по умолчанию build.gradle build.gradle.kts Вывод Это эквивалентно запуску Если вашему скрипту сборки необходимо использовать внешние библиотеки, вы можете добавить их в путь к классам скрипта в самом скрипте сборки. Вы делаете это с помощью метода Пример 13. Объявление внешних зависимостей для скрипта сборки build.gradle build.gradle.kts Блок, переданный методу Объявив путь к классам сценария сборки, вы можете использовать классы в своем сценарии сборки, как и любые другие классы в пути к классам. Следующий пример дополняет предыдущий и использует классы из пути к классам скрипта сборки. Пример 14. Сценарий сборки с внешними зависимостями build.gradle build.gradle.kts Вывод Для мультипроектных сборок зависимости, объявленные с помощью метода Зависимости скрипта сборки могут быть плагинами Gradle. Пожалуйста, обратитесь к Использование плагинов Gradle для получения дополнительной информации о плагинах Gradle. Каждый проект автоматически имеет задачу Эта глава только поверхностно рассказала о том, что возможно. Вот некоторые другие темы, которые могут быть интересны: Создание поддерживаемых сценариев сборки Организация проектов Gradle Написание пользовательских задач 1. Существуют переключатели командной строки для изменения этого поведения. См. Интерфейс командной строки 2. Существуют переключатели командной строки для изменения этого поведения. См. Интерфейс командной строки Оператор экспорта по умолчанию не работает внутри Если я попытаюсь экспортировать его в , а затем импортировать его в другой Я получаю эту большую часть ошибок: 2803b3ef6:37396 Uncaught Error: Ошибка сборки модуля (из ./node_modules/vue-loader/dist/index.js):
TypeError: невозможно прочитать свойства null (чтение «контента»)
в selectBlock (:3000/Users/artur/PhpstormProjects/safa-ameedee.com/node_modules/vue-loader/dist/select.js:23:45)
в Object.loader (:3000/Users/artur/PhpstormProjects/safa-ameedee.com/node_modules/vue-loader/dist/index.js:67:41)
в Object../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../node_modules/vue-loader/dist/index.js??ruleSet[0]. use[0 ]!./resources/vue/backend/components/test.vue?vue&type=script&setup=true&lang=js (app.js?id=3b6365f542826af47b 2803b3ef6:37396:7)
в __webpack_require__ (app.js?id=3b6365f542826af47b 2803b3ef6:64806:42)
в модуле../resources/vue/backend/components/test.vue?vue&type=script&setup=true&lang=js (app.js?id=3b6365f542826af47b 2803b3ef6:60116:217)
в __webpack_require__ (app.js?id=3b6365f542826af47b 2803b3ef6:64806:42)
в Module../resources/vue/backend/components/test.vue (app.js?id=3b6365f542826af47b 2803b3ef6:59477:102)
на __webpack_require__ (app.js?id=3b6365f542826af47b 2803b3ef6:64806:42)
в Module../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0 ]!./resources/vue/backend/components/blog.vue?vue&type=script&setup=true&lang=js (app.js?id=3b6365f542826af47b 2803b3ef6:37336:63)
в __webpack_require__ (app.js?id=3b6365f542826af47b 2803b3ef6:64806:42)
в модуле../resources/vue/backend/components/blog. vue?vue&type=script&setup=true&lang=js (app.js?id=3b6365f542826af47b 2803b3ef6:60084:217)
в __webpack_require__ (app.js?id=3b6365f542826af47b 2803b3ef6:64806:42)
./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!. /resources/vue/backend/components/test.vue?vue&type=script&setup=true&lang=js @ app.js?id=3b6365f542826af47b 2803b3ef6:37396
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/vue/backend/components/test.vue?vue&type=script&setup=true&lang=js @ app.js?id=3b6365f542826af47b 2803b3ef6:60116
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/vue/backend/components/test.vue @ app.js?id=3b6365f542826af47b 2803b3ef6:59477
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!. /resources/vue/backend/components/blog. vue?vue&type=script&setup=true&lang=js @ app.js?id=3b6365f542826af47b 2803b3ef6:37336
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/vue/backend/components/blog.vue?vue&type=script&setup=true&lang=js @ app.js?id=3b6365f542826af47b 2803b3ef6:60084
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/vue/backend/components/blog.vue @ app.js?id=3b6365f542826af47b 2803b3ef6:59328
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/js/router.js @ app.js?id=3b6365f542826af47b 2803b3ef6:39847
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
./resources/js/app.js @ app.js?id=3b6365f542826af47b 2803b3ef6:39770
__webpack_require__ @ app.js?id=3b6365f542826af47b 2803b3ef6:64806
(анонимно) @ app.js?id=3b6365f542826af47b 2803b3ef6:64971
__webpack_require__.O @ app.js?id=3b6365f542826af47b 2803b3ef6:64843
(анонимно) @ app.js?id=3b6365f542826af47b 2803b3ef6:64973
(анонимно) @ app. |