GitLab CI 在另一个变量中设置一个变量

Der*_* C. 5 bash gitlab gitlab-ci

我有一个类似这样的 CI 脚本设置,包含 3 个文件:

# file Vars
.def-vars:
    STAGING_SSH_DEST: mysite.com
    PROJECT_ROOT: myRoot
Run Code Online (Sandbox Code Playgroud)
# file gitlab-ci
variables:
    extends: .def-vars
    STAGING_SSH_DEST: myrealsite.com
    PROJECT_ROOT: /myRealRoot

deploy-stage:
    extends: .deploy
    variables:
        SSH_DESTINATION: $STAGING_SSH_DEST
Run Code Online (Sandbox Code Playgroud)
# file deploy
.deploy:
    variables:
        SSH_DESTINATION: mysite.com
        RSYNC_DESTINATION: $SSH_DESTINATION:$PROJECT_ROOT
Run Code Online (Sandbox Code Playgroud)

我将文件和变量像这样分开,以提高脚本的可重用性。

我的想法是,由于我有多个站点目标、临时产品,我希望能够将 ssh 目标传递给每个目标,并让作业自行计算出 rsync。问题是,变量扩展没有按照我想象的方式工作。

在部署脚本中,我添加了打印并得到以下内容:

$ echo $SSH_DESTINATION            # This is the variable name local to job
   myrealsite.com                  # Yep! printed the passed in value
$ echo $RSYNC_DESTINATION          # $SSH_DESTINATION:$PROJECT_ROOT
   $STAGING_SSH_DEST:/myRealRoot   # That is the name of the variable passed in
Run Code Online (Sandbox Code Playgroud)

root 和 SSH_DESTINATION 打印得很好。当将两者相加时,前者似乎扩展得太少了。

我的想法是在脚本部分中创建 rsync 变量,但我想避免这种情况,因为我希望能够在不编辑作业的情况下覆盖 rsync 变量.deploy

如何才能做到这一点?

And*_*eos 2

Gitlab CI 变量存在问题,导致您无法通过设置正确扩展变量extends。解决此问题的选项是:

  • 在上述问题中发布的的帮助下使用此解决方案before_script。虽然存在一些限制,但对于简单的事情来说它工作得很好。
 before_script:
   - export VAR1="${CI_PIPELINE_ID}"
   - export VAR2="test-${VAR1}"
Run Code Online (Sandbox Code Playgroud)
  • 通过.env 工件下游管道进行某种准备。这个设置比较困难,但它允许创建动态任务(和管道),例如在成功构建后生成多阶段部署。