8

Я пытаюсь использовать Jenkins на Cloudbees для автоматизации развертывания моего программного обеспечения. Я настраиваю свой рабочий процесс следующим образом.Как повторить этап в Jenkins Workflow

Jenkins Workflow

Там может быть раз я хочу, чтобы перераспределить. (предполагая, что эта ступень вводит ручной входной параметр). Как это сделать в рабочем процессе? Вот мой сценарий Groovy.

def src = 'https://git.repo.url/proj.git' 

stage 'Build' 
node { 
    env.JAVA_HOME="${tool name: 'Pre-Installed OpenJDK 8 (Latest) on [email protected] nodes', type: 'hudson.model.JDK'}" 
    sh 'javac -version' 
    git credentialsId: 'abcdef', url: src 
    sh 'ant -f build.xml proj.jar report' 
} 

stage 'Generate Release Version' 
input message: 'Create Tar and Push to S3', ok: 'Generate Release' 
node { 
    // TODO 
} 

stage 'QA Approved' 
input message: 'Enter a Tag Name to approve this build and tag in GIT', ok: 'Approve and Tag', parameters: [[$class: 'StringParameterDefinition', defaultValue: '', description: 'Eg: Sprint73', name: 'TAG_NAME']] 
node { 
    // TODO 
} 

stage 'DevOps - Ansible' 
input message: 'Release to Production', ok: 'Release' 
node { 
    // TODO 
} 

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

+1

Это должно быть разрешено с помощью плагина «контрольная точка». Но в настоящее время это еще не возможно в версии OSS, но голосование идет на их трекер проблемы [JENKINS-33846] (https://issues.jenkins-ci.org/browse/JENKINS-33846). Не стесняйтесь представить свой голос! – Zigac

ответ

2

Предположим, что это последний (невидимый) этап, с которого вы хотите перезапустить, вы можете разместить checkpoint непосредственно перед ним.

checkpoint 'about to deploy' 
stage 'DevOps - Ansible' 
input message: 'Release to Production', ok: 'Release' 
node { 
    // TODO 
} 

Если вы хотите, чтобы развернуть на выбираемой цель, вы можете использовать input:

checkpoint 'about to deploy' 
stage 'DevOps - Ansible' 
def target = input message: 'Where to release?', 
    parameters: [[$class: 'StringParameterDefinition', name: 'target']] 
node { 
    // TODO 
} 

Более сложный сценарием является то, что вы хотите, чтобы всегда разворачивать к стандартной мишени первый раза, но при возобновлении с контрольной точки вы хотите спросить у пользователя альтернативную цель. Для этого вам нужно знать, когда вы возобновляете. В настоящее время checkpoint не предоставляет эту информацию непосредственно (CJP-1620 в CloudBees внутренний вопрос трекеров), но есть обходной путь:

def origBuildNumber = env.BUILD_NUMBER 
checkpoint 'about to deploy' 
stage 'DevOps - Ansible' 
def target 
if (origBuildNumber == env.BUILD_NUMBER) { // original 
    target = 'production' 
} else { // resumed 
    target = input message: 'Where to release?', 
     parameters: [[$class: 'StringParameterDefinition', name: 'target']] 
} 
node { 
    // TODO 
} 
3

Это возможно только в корпоративной версии Дженкинс. Как указал @ jesse-glick, у вас есть плагин Checkpoint, доступный там, см. documentation.

В настоящее время нет плана поддержки этой функции в OSS-версии в соответствии с CloudBees. См. Этот вопрос: JENKINS-33846