我有一个类似这样的 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) 我搜索并发现可以使用--eval
,但是这在 CLI 中不起作用,因为你在 mongodb shell 中。
例如我不能show databases
用--eval
mongo -u root -p pass --eval "show dbs"
MongoDB shell version v4.2.18
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("80746969-2c86-45dc-603f-7f98882e578c") }
MongoDB server version: 4.2.18
2022-03-10T15:33:22.711+0000 E QUERY [js] uncaught exception: SyntaxError: unexpected token: identifier :
@(shell eval):1:5
2022-03-10T15:33:22.711+0000 E - [main] exiting with code -4
Run Code Online (Sandbox Code Playgroud)
我希望有类似mysql的东西mysql -e "show databases"