gpt4 book ai didi

jenkins - 如何在声明式管道中等待用户输入而不阻塞重量级执行器

转载 作者:行者123 更新时间:2023-12-02 06:18:25 28 4
gpt4 key购买 nike

我正在将现有的构建管道重建为 Jenkins 声明性管道(多分支管道),并且在处理构建传播时遇到问题。

打包并存储所有相关文件后,管道应该等待用户输入来触发部署。

如果我只是添加一个输入步骤,当前构建节点将被阻止。由于这个执行器非常重,我想将此步骤移至更轻的机器上。

最初,我作为脚本化管道完成了这项工作,只是创建了两个不同的 node('label') block 。有没有办法让我用声明性语法做类似的事情?

node('spine') { 
stage('builder') {
sh 'mvn clean compile'
stash name: 'artifact', includes: 'target/*.war'
}
}
node('lightweight') {
stage('wait') {
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?'
}
}
// add deployment stages
}

我已经尝试了一些事情:

在顶层配置代理并向传播步骤添加额外的代理配置,但是由于顶层定义的构建节点未停止,因此我有两个执行程序阻塞。

在顶层设置agent none并按步骤配置代理。那么第一个节点上不存在 git checkout。

编辑 1

我按照您的建议重新配置了我的管道,目前看起来像这样:

pipeline {
agent none
tools {
maven 'M3'
}
stages {
stage('Build') {
agent { label 'spine' }
steps {
checkout scm // needed, otherwise the workspace on the first step is empty
sh "mvn clean compile"
}
}
stage('Test') {
agent { label 'spine' }
steps {
sh "mvn verify" // fails because the workspace is empty aggain
junit '**/target/surefire-reports/TEST-*.xml'
}
}
}
}

此构建将失败,因为工作空间不会在步骤之间延续,因为它们不在同一执行器上运行。

编辑2

显然,有时这些步骤在同一个执行器上运行,有时则不然。 (我们根据需要在 mesos/dcos 集群上生成构建从属服务器,因此在构建过程中更改执行器将是一个问题)

我希望只要代理定义中的标签不改变,jenkins 就会使用当前执行器运行。

最佳答案

参见best practice 7 :不要:在节点 block 内使用输入。在声明式管道中,节点选择是通过 agent 指令完成的。

文档 here描述了如何为管道定义 none ,然后使用阶段级 agent 指令在所需节点上运行阶段。我也尝试了相反的方法(在某个节点上定义一个全局代理,然后在输入的阶段级别上定义none),但这不起作用。如果管道分配了一个从站,则您无法为一个或多个特定阶段释放该从站。

这是our pipeline的结构:

pipeline {
agent none
stages {
stage('Build') {
agent { label 'yona' }
steps {
...
}
}
stage('Decide tag on Docker Hub') {
agent none
steps {
script {
env.TAG_ON_DOCKER_HUB = input message: 'User input required',
parameters: [choice(name: 'Tag on Docker Hub', choices: 'no\nyes', description: 'Choose "yes" if you want to deploy this build')]
}
}
}
stage('Tag on Docker Hub') {
agent { label 'yona' }
when {
environment name: 'TAG_ON_DOCKER_HUB', value: 'yes'
}
steps {
...
}
}
}
}

通常,构建阶段在标记为“yona”的构建从站上执行,但输入阶段在主站上运行。

关于jenkins - 如何在声明式管道中等待用户输入而不阻塞重量级执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com