Rancher Pipeline: 如何在不同阶段之间传递环境变量

68次阅读
没有评论

问题描述

正在尝试将现有的构建基础设施迁移到Rancher和其CICD流水线。他的主要问题是:是否可以在不同阶段之间传递环境变量?
用户的应用程序是基于Java / Spring的(因此有一个包含版本等信息的pom.xml)。他想要提取像VERSION和CHANNEL(快照或发布)这样的信息,这些信息在下一步(’构建和部署镜像’)中需要,因为我们需要为’docker build’命令提供一些环境变量。
用户知道可以通过共享的工作目录传递数据,但不幸的是,只能通过’PLUGIN_BUILD_ARGS’变量将环境变量传递给’构建和部署镜像’阶段中的’docker build’命令(参考链接:https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#build-and-publish-images)。用户还发现在’构建和部署镜像’容器中运行脚本来提供这些环境变量似乎是不可能的。
用户还了解到Rancher提供了一系列环境变量(参考链接:https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#pipeline-variable-substitution-reference),但这些变量都无法满足他的需求。用户想知道是否有办法扩展这个环境变量列表。
用户已经尝试传递变量,但没有成功:

stages:
- name: export
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        export FOO="bar"
- name: echo
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        env
        echo ${FOO}
timeout: 60
notification: {}

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Rancher流水线中,可以使用export命令将环境变量从一个阶段传递到另一个阶段。以下是如何在不同阶段之间传递环境变量的步骤:
1. 在源阶段中使用export命令设置要传递的环境变量。例如,export FOO="bar"
2. 在目标阶段中使用${{FOO}}语法引用传递的环境变量。例如,echo ${{FOO}}
下面是一个示例流水线配置:

stages:
- name: export
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        export FOO="bar"
- name: echo
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        echo ${{FOO}}
timeout: 60
notification: {}

在上面的示例中,我们在export阶段中设置了环境变量FOO"bar"。然后,在echo阶段中,我们使用${{FOO}}引用了传递的环境变量。这将在日志中打印出"bar"

方案2

如果在Rancher流水线中无法直接传递环境变量,可以考虑使用文件来传递数据。以下是一种可能的方法:
1. 在源阶段中,将要传递的环境变量写入一个文件。例如,echo "FOO=bar" > env.txt
2. 在目标阶段中,读取该文件并将环境变量导入。例如,source env.txt
下面是一个示例流水线配置:

stages:
- name: export
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        echo "FOO=bar" > env.txt
- name: echo
  steps:
  - runScriptConfig:
      image: maven
      shellScript: |-
        source env.txt
        echo $FOO
timeout: 60
notification: {}

在上面的示例中,我们在export阶段中将环境变量FOO写入了一个名为env.txt的文件。然后,在echo阶段中,我们使用source env.txt命令将环境变量导入,并在日志中打印出"bar"
请注意,这种方法需要在目标阶段中使用source命令来导入环境变量。这可能会有一些限制,具体取决于Rancher流水线的配置和环境。

方案3

如果以上方法都无法满足需求,可以考虑使用第三方工具或脚本来传递环境变量。以下是一种可能的方法:
1. 在源阶段中,将要传递的环境变量写入一个文件。例如,echo "FOO=bar" > env.txt
2. 在目标阶段中,使用第三方工具或脚本来读取该文件并将环境变量导入。具体的工具或脚本取决于你的需求和环境。
请注意,这种方法可能需要额外的配置和设置,并且可能会增加复杂性。确保在使用第三方工具或脚本之前,仔细评估其适用性和安全性。
以上是几种在Rancher流水线中传递环境变量的方法。根据你的具体需求和环境,选择适合你的方法。

正文完