Прямых ответов на некоторые из ваших вопросов нет, но они могут быть достигнуты с помощью некоторого дополнительного кодирования. В то время как некоторые люди могли бы найти какой-то другой способ достижения, но позвольте мне попробовать с тем, что у меня в уме:
1) How can I run the stage I prefer? For instance Greeting instead of starting from Preparation?
Это может быть достигнуто путем добавления логического параметра FASTFORWARD_TO_GREETING и чем использовать значение, указанное в процессе выполнения строить манипулировать поток вашей сборки. Так что ваш код будет выглядеть так:
if (FASTFORWARD_TO_GREETING == 'false') {
stage('Preparation'){
echo """
Preparing
something
"""
}
}
stage('Greeting') {
parallel 'hello1':{
node{
echo 'hello world 1'
}
}, 'hello2':{
node{
echo 'hello world 2'
}
}
}
2) How do you define the dependencies between stages? I mean the stage called after another one completes
Этапы выполняются последовательно, так что, если этап определяется первым он будет запущен и завершен первый, прежде чем перейти к следующему этапу. Однако на параллельном этапе это не выполняется, так как все этапы будут выполняться параллельно. Таким образом, в вашем примере кода вы определили, что этап «Подготовка» будет выполнен первым, и только параллельные шаги «hello1» и «hello2» будут выполняться параллельно. Однако нет никакой гарантии, что будет напечатан «hello world1» или «hello world 2».
3) Is there a way to limit the stages that a certain user can start? Imagine that I only want a specific user to launch the Greeting stage.
У вас может быть ручной шаг утверждения непосредственно перед некоторым этапом. Например, в коде вы хотите подготовительного этапа должны быть выполнены, и чем вы хотите, чтобы пойти с ручным одобрением перед выполнением этапа приветствия, ваш код будет выглядеть примерно так:
stage('Preparation'){
echo """
Preparing
something
"""
}
stage concurrency: 1, name: 'approve-greeting'
input id: 'greeting-deploy', message: 'Proceed to Greeting?', ok: 'Deploy'
stage('Greeting') {
parallel 'hello1':{
node{
echo 'hello world 1'
}
}, 'hello2':{
node{
echo 'hello world 2'
}
}
}
Что произойдет после того, как это, когда вы выполняете сборку, подготовка сцены будет выполнена, но после этого задание будет ждать утверждения вручную. В представлении Jenkins Pipeline этап будет называться «одобрить-приветствие», и он будет ждать, пока кто-то одобрит сборку, щелкнув по ней в представлении.
4) How do you setup manual stages?
Я полагаю, на это ответил ответ 3?
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация/пояснения.
EDIT :: Вы можете найти дальнейшие ответы ниже:
сборки Stage (любой пользователь может запустить его), когда он закончит это вызывает автоматически Приемка этап.
Очевидно, что этап сценического этапа и этапа приема будет определен как нормальный этап в трубопроводе Дженкинса. Так что ваш код будет просто как:
node {
//define any variable here
// Get source code from repo using checkout to directory say stackoverflow
// Get source code from repo for acceptance test using checkout to directory say stackoverflow-test
//Define any tool like Maven etc. location if required.
dir('stackoverflow') {
stage name: 'build'
//Do required steps
}
dir('stackoverflow-test') {
stage name: 'Acceptance'
//Do required steps here
}
В этот момент, когда Приемка этап закончил хорошо, две вещи могут случиться:
Может QA этап необходим для запуска больше тестов (Огурцы, руководство и т. Д.). Некоторый авторизованный пользователь запустит этот этап.
Когда владелец продукта счастлив, он может принять решение о запуске этапа производства для развертывания кода в производственной среде.
Это можно сделать при наличии опции ввода так после того, как выше кусок кода, который вы могли теперь написать:
stage 'promotion'
def userInput = input(
id: 'userInput', message: 'Let\'s promote?', parameters: [
[$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Production', name: 'prod'],
[$class: 'BooleanParameterDefinition', defaultValue: false, description: 'ManualQA', name: 'qa']
])
echo ("Env: "+userInput['prod'])
echo ("Target: "+userInput['qa'])
Чем вы можете взять значение сверху и управлять потоком снова. Как:
Если значение прод верно, чем приступить к производства стадии Если значение ца верно, чем перейти к QA-Manual стадии так же, как мой выше примере кода FASTFORWARD_TO_GREETING.
EDIT 2
Далее отвечая на вопросы в разделе комментариев:
1) Как и где я могу указать параметры, такие как FASTFORWARD_TO_GREETING
параметров, как FASTFORWARD_TO_GREETING будет определяться как Уровень работы parameter
2) На этапе продвижения вам необходимо выбрать между ManualQA и Production. Если пользователь выбирает ManualQA, он запускает этот этап пропуска Production. После этого я хочу, чтобы пользователь был пропущен, если он хочет, чтобы продвигался на стадию производства. Если бы вы могли предоставить полное определение , то это было бы здорово.
Это можно было обработать после этапа MaualQA с помощью другого шага ввода, но на этот раз с одним параметром. Таким образом, после этапа продвижения, будет этап ManualQA и чем после того, как что ниже входного шага:
def userInput1 = input(
id: 'userInput', message: 'Let\'s promote?', parameters: [
[$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Production', name: 'prod']
])
3) Как я могу определить, если пользователь имеет разрешение на запуск стадии или нет. В идеале я хотел бы сделать это на основе ролей.
Я не уверен, как это сделать с ролями, но я считаю, что любой, у кого есть доступ администратора или работает, будет иметь доступ для запуска/одобрения этого этапа, но я я не уверен на 100%, если он может быть каким-то образом изменен.
Привет Маниш, спасибо за помощь мне с этим. Реальной целью, которую я хочу достичь, является моделирование непрерывного трубопровода. Я обновил вопрос с информацией. Надеюсь, ты поможешь мне справиться с этим. – codependent
@codependent Я обновил ответ. Дайте мне знать, если вам нужна помощь. –
Огромное вам спасибо, он приближается к тому, что мне нужно. Осталось всего три оставшихся сомнения: 1) Как и где указать параметры, такие как FASTFORWARD_TO_GREETING?2) На этапе продвижения вам нужно выбирать между ManualQA и Production. I пользователь выбирает ManualQA, он запускает этот этап пропускания Production. После этого я хочу, чтобы пользователь был выпущен, если он хочет продвигаться на стадию производства. Если бы вы могли предоставить полное определение конвейера, было бы здорово. Наконец 3) Как я могу определить, имеет ли пользователь разрешения для запуска стадии или нет. В идеале я хотел бы сделать это на основе ролей. См. Еще один вопрос: – codependent