我在 git SCM 中有一个由 Groovy 支持的 Jenkins 管道,其中
stage
中有 steps
。
我为什么这么做——为了重用代码。实际上,我们的可重用代码位于一个具有 stage
的常规方法中。我们从steps
调用这个绝妙的方法。它导致 stage
节点在 blueocean 上被隐藏。它不会仅仅因为舞台是从 stage
调用而将 stage
视为 steps
。
下面是蓝海视图的样子。 Code Push and Test Execution stage
就是问题所在。代码如下所示-
tests = [:]
//code for other stages like Prepare, Initialize, Prepare App
stage('Test') {
stages{
stage('Cycle and Test Definition Prep') {
steps {
script {
//groovy code to populate tests variable
for (int i = 1; i <= NUMBER_OF_ORGS.toInteger(); ++i) {
def orgNumber = i;
tests['Org ' + orgNumber] = {
processOrg(orgNumber, cycleKey, definitionKey, newCycleName, folderName)
}
}
}
}
}
stage('Code Push and Test Execution') {
steps {
script {
parallel tests
}
}
}
}
}
}
void processOrg(int orgNumber, String testCycleID, String testCycleDefinition, String newCycleName, String testResultFolder) {
def orgUsername
def directory
stage ('Deployment' + orgNumber) {
//some code
}
}
我期待部署 1 等阶段显示为未发生的阶段。
PS:-我看到https://stackoverflow.com/a/57507753/6532664&Jenkins管道中的节点、阶段和步骤有什么区别?但仍然想看看是否有办法出去。这是完美的工作,但只是没有显示在 blueocean 中,我有下行代码来检查失败阶段。现在,因为它不被识别为一个阶段,所以我的缺点代码无法工作。
由于 blueocean 和 classic UI 中渲染阶段的逻辑不同而出现视觉问题
script {}
内的所有代码都将被视为“脚本化”管道
jenkins 经典 UI 显示“舞台名称”,而 blueocean 显示分支名称
tests['Org ' + orgNumber]
- 它是并行 code 的分支名称
在完美的情况下需要使用相同的阶段名称和分支名称进行并行
def tests = [:]
void processOrg(int orgNumber, String testCycleID, String testCycleDefinition, String newCycleName, String testResultFolder) {
stage ('Deployment' + orgNumber) {
//some code
}
}
pipeline {
agent any
stages {
stage('Test') {
stages {
stage('Cycle and Test Definition Prep') {
steps {
script {
//groovy code to populate tests variable
for (int i = 1; i <= NUMBER_OF_ORGS.toInteger(); ++i) {
def orgNumber = i;
tests['Deployment' + orgNumber] = {
processOrg(orgNumber, cycleKey, definitionKey, newCycleName, folderName)
}
}
}
}
}
stage('Code Push and Test Execution') {
steps {
script {
parallel tests
}
}
}
}
}
}
}
使用 Map 作为 arg 会更好
void processOrg(Map args) {
print("${args.orgNumber} ${args.testCycleID}")
}
并使用类似
def args = [orgNumber: 1, testCycleID: "111"]
processOrg(args)
或
processOrg(orgNumber: 1, testCycleID: "111")