我有一个带有3个文件的CI脚本设置:
# file Vars
.def-vars:
STAGING_SSH_DEST: mysite.com
PROJECT_ROOT: myRoot
# 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
# file deploy
.deploy:
variables:
SSH_DESTINATION: mysite.com
RSYNC_DESTINATION: $SSH_DESTINATION:$PROJECT_ROOT
我将文件和变量按这种方式拆分,以提高脚本的可重用性。
这个想法是,因为我有多个站点目标,暂存产品,所以我希望能够将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
root和SSH_DESTINATION打印就很好。在将两者相加时,前者似乎扩展了太少了。
我的想法是只在脚本部分中创建rsync变量,但是我想避免这种情况,因为我希望能够在不编辑.deploy
作业的情况下覆盖rsync变量。
这怎么完成?