我使用詹金斯管道与声明语法,目前与以下阶段:使用轻量级执行人的声明流水线阶段(代理无)
- 准备
- 生成(两个并联组步骤)
- 测试(也两个步骤并行套)
- 向如果/何处部署
- 部署
对于步骤1,2,3和5,我需要和代理(执行者),因为他们在工作区上做实际工作。对于第4步,我不需要一个,并且我希望在等待用户输入时不会阻止可用的执行程序。这似乎被称为传统脚本语法的“轻量级”或“轻量级”执行程序,但我无法找到任何有关如何使用声明性语法实现此功能的信息。
到目前为止,我已经试过:
- 在管道选项直接设置一个代理,然后在舞台上设置
agent none
。这不起作用,并且流水线正常运行,在等待输入的同时阻止执行程序。它在文档中也提到它不起作用,但我认为我会无论如何给它一个镜头。 - 在管道选项中设置
agent none
,然后为#4以外的每个阶段设置代理。不幸的是,但预计,这会为每个阶段分配一个新的工作空间,这反过来又要求我存储和取消存储。这是混乱的,并且在并行阶段(2和3)给我带来了更多问题,因为我不能在parallel
构造之外拥有代码。我假设平行步骤在同一个工作区中运行,因此在两者中存储/清除会产生不幸的结果。
这里是我的Jenkinsfile的轮廓:
pipeline {
agent {
label 'build-slave'
}
stages {
stage("Prepare build") {
steps {
// ...
}
}
stage("Build") {
steps {
parallel(
frontend: {
// ...
},
backend: {
// ...
}
)
}
}
stage("Test") {
steps {
parallel(
jslint: {
// ...
},
phpcs: {
// ...
},
)
}
post {
// ...
}
}
stage("Select deploy target") {
steps {
script {
// ... code that determines choiceParameterDefinition based on branch name ...
try {
timeout(time: 5, unit: 'MINUTES') {
deployEnvironment = input message: 'Deploy target', parameters: [choiceParameterDefinition]
}
} catch(ex) {
deployEnvironment = null
}
}
}
}
stage("Deploy") {
when {
expression {
return binding.variables.get("deployEnvironment")
}
}
steps {
// ...
}
}
}
post {
// ...
}
}
我在这里失去了一些东西,或者是它只是不可能在目前的版本?
很高兴知道这实际上是有保证的,特别是因为我想使用多个构建从站。我似乎无法找到关于它的文档中的任何内容,除了一些提及它正在为docker实例实施的内容。 – runemoennike
@runemoennike它不能保证;我已经编辑了我的答案以反映这一点,并且提及您可以使用'script'块来存放/去掉以解决(并行)是“steps”中唯一项的(当前)要求。 –
好的,谢谢! – runemoennike