微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?