首页 > 解决方案 > Jenkins替换存储在另一个存储库中的yaml文件中的图像标签

问题描述

我有两个不同的应用程序和清单存储库。在清单存储库中,我有values.yaml每个微服务的文件。我正在寻找一种image.tag使用 ${BUILD_NUMBER} 更新值的方法,然后将这些更改从应用程序管道提交/合并到清单存储库,如下所示。

这样做的最佳方法是什么?

image:
  repository: example.com/app/backend
  tag: "450"
  pullPolicy: Always

这是 jenkinsfile 中用于应用程序 repo 的阶段。

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
            """
        }
    }

标签: jenkinsjenkins-pipelinegitops

解决方案


使用该解决方案,您values.yaml的内容将被替换,并且每次该文件都会被视为已更改。
另一种解决方案可能是:处理 yaml 文件中的环境变量并通过 jenkinsfile 导出值。 您可以在标签部分的文件中
添加环境变量。 其中的示例可能是: 然后您可以通过 jenkins 管道传递此环境变量的值。${ENVIRONMENT_VARIABLE}values.yaml
${BUILD_NUMBER}

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


推荐阅读