Jenkins 替换存储在另一个存储库中的 yaml 文件中的图像标签

问题描述

我有两个不同的应用程序和清单存储库。在清单存储库中,我为每个微服务都有 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...