我想创建一个通用的.deploy
模板。
从该模板继承的每个作业都应该能够在继承模板的脚本之间添加一些自定义script
逻辑。但是怎么做呢?
示例:
.deploy
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
before_script:
- ...
script:
- touch .env
- echo "SOME_COMMON_KEY=VALUE" >> .env
- $$PSEUDOCODE / PLACE YOUR CUSTOM LOGIC HERE
- ssh -i $SSH_ -o "StrictHostKeyChecking=no" $USER@$SERVER
- scp -i $SSH docker-compose.yml .env $USER@$SERVER:~/test/
- ssh -i $SSH $USER@$SERVER "docker-compose up"...
deploy_test:
extends: .deploy
variables:
USER: test
SERVER: test
script:
#TODO how to add custom statements in place of the $$PSEUDOCODE ?
deploy_prod:
extends: .deploy
variables:
USER: prod
SERVER: prod
script:
#TODO how to add custom statements in place of the $$PSEUDOCODE ?
那么,如何添加一些自定义语句来代替$$PSEUDOCODE
行呢?
您可以做的一件事是在环境变量上使用eval
。
.deploy:
# ...
variables:
USER_SCRIPT:
value: ""
description: "The contents of this variable will be executed with `eval` during the job script."
script:
- touch .env
- echo "SOME_COMMON_KEY=VALUE" >> .env
- eval "${USER_SCRIPT}"
# ...
用户可以在before_script
和script:
之前或之后在扩展作业中插入逻辑的另一种方式是使用!reference
标记。
例如,在before_script:
之后但在script:
之前插入逻辑
another_job:
extends: .deploy
before_script:
- echo "additional steps before before_script:"
- !reference [.deploy, before_script]
- echo "Additional step after before_script"
script:
- echo "Additional steps before script:"
- !reference [.deploy, script]
- echo "Additional steps after script:"
您的两个作业是否共享相同的代码?如果是,您可以使用脚本的YAML锚点来完成
在你的例子中,它可以给出:
.pseudo_code: &pseudo_code
- echo "Hello $USER on $SERVER"
.deploy:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
before_script:
- ...
script:
- touch .env
- echo "SOME_COMMON_KEY=VALUE" >> .env
- *pseudo_code
- ssh -i $SSH_ -o "StrictHostKeyChecking=no" $USER@$SERVER
- scp -i $SSH docker-compose.yml .env $USER@$SERVER:~/test/
- ssh -i $SSH $USER@$SERVER "docker-compose up"...
deploy_test:
extends: .deploy
variables:
USER: test
SERVER: test
deploy_prod:
extends: .deploy
variables:
USER: prod
SERVER: prod