在Bitbucket管道的各个步骤中使变量可见吗?

时间:2018-09-24 14:10:16

标签: environment-variables bitbucket-pipelines

我想在两个步骤中共享一个变量。

我将其定义为:

- export MY_VAR="FOO-$BITBUCKET_BUILD_NUMBER"

但是当我尝试在其他步骤中打印它时:

- echo $MY_VAR

它是空的。

如何共享此类变量?

3 个答案:

答案 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-IDERik 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