首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向gitlab作业模板添加自定义脚本语句?

如何向gitlab作业模板添加自定义脚本语句?
EN

Stack Overflow用户
提问于 2022-04-07 12:55:10
回答 2查看 240关注 0票数 1

我想要创建一个通用的.deploy模板。

从该模板继承的每个作业都应该能够在继承模板的脚本的script之间添加一些自定义的逻辑。但是怎么做呢?

示例:

代码语言:javascript
复制
.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行呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-08 01:56:41

您可以做的一件事是在环境变量上使用eval

代码语言:javascript
复制
.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_scriptscript:之前或之后在扩展作业中插入逻辑的另一种方法是使用!reference标记。

例如,在before_script:之后但在script:之前插入逻辑

代码语言:javascript
复制
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:"
票数 2
EN

Stack Overflow用户

发布于 2022-04-07 13:36:08

你能让你的两个工作共享相同的代码吗?如果是,您可以使用YAML脚本锚来完成

在您的示例中,它可以提供:

代码语言:javascript
复制
.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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71782576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档