我想在两个步骤中共享一个变量。
我将其定义为:
- export MY_VAR="FOO-$BITBUCKET_BUILD_NUMBER"
但是当我尝试在其他步骤中打印它时:
- echo $MY_VAR
它是空的。
如何共享此类变量?
答案 0 :(得分:5)
恐怕,但是似乎不可能从一个步骤到另一个步骤共享环境变量,但是您可以在pipelines
类别下的项目设置中为所有步骤定义全局环境变量。
Settings -> Pipelines -> Repository Variables
答案 1 :(得分:3)
您可以将所有环境变量复制到文件中,然后重新读取它们:
- step1:
# Export some variables
- export MY_VAR1="FOO1-$BITBUCKET_BUILD_NUMBER"
- export MY_VAR2="FOO2-$BITBUCKET_BUILD_NUMBER"
- echo $MY_VAR1
- echo $MY_VAR2
# Copy all the environment variables to a file, as KEY=VALUE, to share to other steps
- printenv > ENVIRONMENT_VARIABLES.txt
- step2:
# Read all the previous environment variables from the file, and export them again
- export $(cat ENVIRONMENT_VARIABLES.txt | xargs)
- echo $MY_VAR1
- echo $MY_VAR2
更多信息:
答案 2 :(得分:2)
如Mr-IDE和Rik Tytgat所述,您可以通过将环境变量写入文件来导出环境变量,然后在后续步骤中以artifact的形式共享此文件。一种方法是一步将变量写入Shell脚本,将其定义为artifact
,然后在下一步中获取它。
definitions:
steps:
- step: &build
name: Build
script:
- MY_VAR="FOO-$BITBUCKET_BUILD_NUMBER"
- echo $MY_VAR
- echo "export MY_VAR=$MY_VAR" >> set_env.sh
artifacts: # define the artifacts to be passed to each future step
- set_env.sh
- step: &deploy
name: Deploy
script:
# use the artifact from the previous step
- cat set_env.sh
- source set_env.sh
- echo $MY_VAR
pipelines:
branches:
master:
- step: *build
- step:
<<: *deploy
deployment: test
NB:就我而言,将set_env.sh
作为工件发布的步骤并不总是我的管道的一部分。在这种情况下,请务必在使用前检查文件是否存在。
- step: &deploy
name: Deploy
image: alpine
script:
# check if env file exists
- if [ -e set_env.sh ]; then
- cat set_env.sh
- source set_env.sh
- fi