【问题标题】:Gitlab CICD: use functions inside gitlab-ci.ymlGitlab CICD:使用 gitlab-ci.yml 中的函数
【发布时间】:2022-01-08 05:02:03
【问题描述】:

我有一个 .gitlab-ci.yml 文件,它允许需要为每个步骤执行相同的功能。我有以下内容,这很有效。

image:
  name: hashicorp/terraform

before_script: 
  - export MYDATE=$(date "+%d/%m/%y - %H:%M:%S")

stages:
  - validate
  - plan

validate:
  stage: validate
  script:
    - terraform validate
    - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'
  variables:
    msg: "Example1"

plan:
  stage: plan
  script:
    - terraform validate
    - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'
  variables:
    msg: "Example2"

鉴于它总是相同的 curl 命令,我想使用一个我声明一次并且可以在每个步骤中使用的函数。类似于以下 sn-p 的内容。

image:
  name: hashicorp/terraform

before_script: 
  - export MYDATE=$(date "+%d/%m/%y - %H:%M:%S")

.send_message: &send_message
  script:  
  - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'

stages:
  - validate
  - plan

validate:
  stage: validate
  script:
    - terraform validate
    - &send_message
  variables:
    msg: "Example1"

plan:
  stage: plan
  script:
    - terraform validate
    - &send_message
  variables:
    msg: "Example2"

如何在 .gitlab-ci.yml 文件中使用这样的函数。

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    您可以将include!reference 一起使用,例如:

    • functions.yml
    .send_message:
      script:  
      - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'
    
    • .gitlab-ci.yml
    include:
      - local: functions.yml
    
    default:
      image:
        name: hashicorp/terraform
      before_script: 
        - export MYDATE=$(date "+%d/%m/%y - %H:%M:%S")
    
    stages:
      - validate
      - plan
    
    validate:
      stage: validate
      script:
        - terraform validate
        - !reference [.send_message, script]
      variables:
        msg: "Example1"
    
    plan:
      stage: plan
      script:
        - terraform validate
        - !reference [.send_message, script]
      variables:
        msg: "Example2"
    

    参考:https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#reference-tags

    【讨论】:

    • 这正是我想要的。完美运行!
    猜你喜欢
    • 2019-09-27
    • 2016-02-29
    • 2019-08-28
    • 2019-02-08
    • 2017-11-30
    • 1970-01-01
    • 2020-02-14
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多