在Jenkins中,我创建了一个管道来经历几个阶段。在第二阶段,在第一阶段克隆存储库之后,我想检查${REPOSITORY_NAME}/apps
目录中是否存在名为${FILENAME}
的文件。
如果存在,我想执行kubectl rollout restart deployment ${APPLICATION_NAME}
,如果不存在,我想创建这样的应用程序。
我不习惯Jenkins的环境变量,在if-else语句中使用它时遇到了麻烦。
即使${FILENAME}
存在,env.ALREADY_EXISTS
也不会变成"true"
;但是我已经确认了echo "ALREADY_EXISTS = ${ALREADY_EXISTS}"
的结果是ALREADY_EXISTS = true
。
为什么env.ALREADY_EXISTS
没有更新,如何解决这个问题?先谢谢你了。
pipeline {
agent any
environment {
APPLICATION_NAME="myapp"
REPOSITORY_NAME="myrepo"
FILENAME="${APPLICATION_NAME}-app.yaml"
ALREADY_EXISTS="false"
}
stages {
stage("Clone Git Repository") {
steps {
git(
url: "https://github.com/myid/${REPOSITORY_NAME}.git",
branch: "main",
changelog: true,
credentialsId: 'mycreds',
poll: true
)
}
}
stage("Check if file already exists") {
steps {
sh '''
cd ./apps
if [ -f "${FILENAME}" ]; then
echo "${FILENAME} exists"
ALREADY_EXISTS="true"
else
echo "${FILENAME} does not exist"
ALREADY_EXISTS="false"
fi
echo "ALREADY_EXISTS = ${ALREADY_EXISTS}"
cd ..
'''
}
}
stage("Rollout or create app") {
steps {
script {
if (env.ALREADY_EXISTS == "true") {
withKubeConfig([namespace: "${APPLICATION_NAME}-${CLIENT_ID}"]) {
sh 'curl -LO https://dl.k8s.io/release/v1.26.3/bin/linux/amd64/kubectl'
sh 'chmod u+x ./kubectl'
sh './kubectl rollout restart deployment ${APPLICATION_NAME}'
}
} else {
sh '''
# Create new app ...
'''
}
}
}
}
}
}
1条答案
按热度按时间ulydmbyx1#
不能在
sh
块中设置环境变量或管道变量。这里是你如何可以做到这一点。以下是使用fileExists实用程序步骤的简化版本。