Gitlab-ci 丢失环境变量

Gitlab-ci lost environment variables

我正在 GitLab-ci 上开发一个管道,在第一份工作中我使用 gittools/gitversion 获取我的软件的语义版本。

这里是 /gitversion-ci-cd-plugin-extension.gitlab-ci.yml 的一小段代码(这里是完整的文档 https://gitversion.net/docs/reference/build-servers/gitlab

.gitversion_function:
  image:
    name: gittools/gitversion
    entrypoint: ['']
  stage: .pre
  .....
  .....
  artifacts:
    reports:
      #propagates variables into the pipeline level
      dotenv: thisversion.env

那么我的流水线简化版如下

stages:
  - .pre
  - install_dependencies
  - build
  - deploy


include:
  - local: '/gitversion-ci-cd-plugin-extension.gitlab-ci.yml'


determineversion:
  extends: .gitversion_function

  
install_dependencies:
  image: node:16.14
  stage: install_dependencies
  script:
    - echo ${PACKAGE_VERSION}


build:
  image: node:16.14
  stage: build
  script:
    - echo $PACKAGE_VERSION


deploy:
  image: bitnami/kubectl
  stage: deploy
  needs: ['build']
  script:
    - echo $PACKAGE_VERSION

问题是环境变量 $PACKAGE_VERSION 在前两个作业 install_dependenciesbuild 中起作用。

echo $PACKAGE_NAME;  //0.0.1 

但是当执行作业 deploy 时,环境变量没有被管道扩展,我从字面上得到了这个

echo $PACKAGE_NAME;  //$PACKAGE_NAME 

我发现了问题。 在管道的最后一个作业中,我使用 needs (https://docs.gitlab.com/ee/ci/yaml/#needs) 来建立作业之间的依赖关系。 问题是工件不会自动传递,因为 determineversiondeploy 之间没有依赖关系,要修复我这样做:

...
deploy:
  image: bitnami/kubectl
  stage: deploy
  needs: ['determineversion', 'build']  # <------
  script:
    - echo $PACKAGE_VERSION
...

我添加了determineversion作为deploy的依赖,这样$PACKAGE_VERSION就可以正确打印