Gitlab CICD:使用 gitlab-ci.yml 中的函数

wiw*_*978 6 gitlab gitlab-ci

我有一个 .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"
Run Code Online (Sandbox Code Playgroud)

鉴于它始终是相同的curl命令,我想使用一个我声明一次并且可以在每个步骤中使用的函数。类似于下面代码片段的内容。

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"
Run Code Online (Sandbox Code Playgroud)

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

小智 11

您可以使用以下include命令!reference

  • 函数.yml
.send_message:
  script:  
  - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'
Run Code Online (Sandbox Code Playgroud)
  • .gitlab-ci.yml
.send_message:
  script:  
  - 'curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $msg" https://api.teams.com/v1/messages'
Run Code Online (Sandbox Code Playgroud)

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


Ken*_*ams 5

您还可以使用bash顶部定义的常规旧函数:

before_script: 
  - export MYDATE=$(date "+%d/%m/%y - %H:%M:%S")
  - send_bearer () { terraform validate; curl --request POST --header "Authorization: Bearer $bearer"  --form "text=$MYDATE $1" https://api.teams.com/v1/messages; }

...

validate:
  stage: validate
  script:
    - send_bearer $msg
  variables:
    msg: "Example1"

plan:
  stage: plan
  script:
    - send_bearer $msg
  variables:
    msg: "Example2"
Run Code Online (Sandbox Code Playgroud)

  • 只是指出,如果“before_script”在作业中被重写,它将不再具有该函数定义。 (5认同)