Jug*_*uge 3 sh jenkins jenkins-groovy jenkins-pipeline
我已经在 Jenkins 管道中定义了全局变量
def BUILDNRO = '0'
pipeline { ...
Run Code Online (Sandbox Code Playgroud)
然后,我使用 shell 脚本操作变量,以使用作业构建号作为标识符来并行运行构建,这样我们就不会混合不同的 docker 群。
stage('Handle BUILD_NUMBER') {
steps {
script {
BUILDNRO = sh( script: '''#!/bin/bash
Build=`echo ${BUILD_NUMBER} | grep -o '..$'`
# Check if BUILD first character is 0
if [[ $Build:0:1 == "0" ]]; then
# replace BUILD first character from 0 to 5
Build=`echo $Build | sed s/./5/1`
fi
echo $Build
''',returnStdout: true).trim()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从上一个阶段获取价值并尝试在下一阶段获取全局变量
stage('DOCKER: Init docker swarm') {
steps {
echo "BUILDNRO is: ${BUILDNRO}" --> Value is here.
sh '''#!/bin/bash
echo Buildnro is: ${BUILDNRO} --> This is empty.
...
}
}
Run Code Online (Sandbox Code Playgroud)
这将使全局变量为空。为什么?在前一个阶段,它是有价值的。
编辑1. 修改代码块以反映当前状态。
我设法弄清楚了。这是我如何做到的解决方案。BUILDNRO 是 groovy 变量,如果想在 bash 变量中使用它必须使用 withEnv 传递。第一阶段的 BUILD_NUMBER 是 bash 变量,因此可以在第一阶段直接使用脚本。
def BUILDNRO = '0'
pipeline {
....
stages {
stage('Handle BUILD_NUMBER') {
steps {
script {
BUILDNRO = sh( script: '''#!/bin/bash
Build=`echo ${BUILD_NUMBER} | grep -o '..$'`
''',returnStdout: true).trim()
}
}
}
stage('DOCKER: Init docker swarm') {
steps {
dir("prose_env/prose_api_dev_env") {
withEnv(["MYNRO=${BUILDNRO}"]) {
sh(returnStdout: false, script: '''#!/bin/bash
echo Buildnro is: ${MYNRO}`
'''.stripIndent())
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7172 次 |
| 最近记录: |