问题描述
我有两个不同的应用程序和清单存储库。在清单存储库中,我为每个微服务都有 values.yaml
文件。我正在寻找一种使用 ${BUILD_NUMBER} 更新 image.tag
值的方法,然后将这些更改提交/合并到应用管道中的清单存储库,如下所示。
这样做的最佳方法是什么?
image:
repository: example.com/app/backend
tag: "450"
pullPolicy: Always
这是 jenkinsfile 中应用程序存储库的阶段。
stage('Deploy to DEV') {
when{
beforeAgent true
expression{return env.GIT_BRANCH == "origin/development"}
}
steps {
script {
sh """
git clone https://github.com/mycompany/backend.git
cd apps/project1/app-dev/backend-dev
def text = readFile file: "values.yaml"
text = text.replaceAll("%tag%","${${BUILD_NUMBER}}")
git add . -m "Update app image tag to ${BUILD_NUMBER}"
git push origin master
"""
}
}
解决方法
使用该解决方案,您的 values.yaml
将被替换为内容,并且每次此文件都会被视为已更改。
另一种解决方案可能是:处理 yaml 文件中的环境变量并通过 jenkinsfile 导出值。
您可以在标签部分的 ${ENVIRONMENT_VARIABLE}
文件中添加环境变量 values.yaml
。
这方面的例子可能是:${BUILD_NUMBER}
然后你可以通过 jenkins 管道传递这个环境变量的值。export ENV_VAR_NAME=env_var_value
export BUILD_NUMBER=${BUILD_NUMBER}
sh """
git clone https://github.com/mycompany/backend.git
cd apps/project1/app-dev/backend-dev
# def text = readFile file: "values.yaml"
# text = text.replaceAll("%tag%","${${BUILD_NUMBER}}")
export BUILD_NUMBER=${BUILD_NUMBER}
git add . -m "Update app image tag to ${BUILD_NUMBER}"
git push origin master
"""
有关在 yaml 文件中使用环境变量的更多信息: https://docs.greatexpectations.io/en/0.11.6/how_to_guides/configuring_data_contexts/how_to_use_a_yaml_file_or_environment_variables_to_populate_credentials.html