GitLabCI系列之流水線語法第一部分

GitLabCI系列之流水線語法第一部分

本文是《GitLabCI實踐》教程部分內容,點擊擴展鏈接報名學習!


job

在每個項目中,我們使用名為.gitlab-ci.yml的YAML文件配置GitLab CI / CD 管道。

  • 可以定義一個或多個作業(job)。
  • 每個作業必須具有唯一的名稱(不能使用關鍵字)。
  • 每個作業是獨立執行的。
  • 每個作業至少要包含一個script。


<code>

job1

:

script

:

"execute-script-for-job1"

job2

:

script

:

"execute-script-for-job2"

/<code>


註釋: 這裡在pipeline中定義了兩個作業,每個作業運行不同的命令。命令可以是shell或腳本。

script

<code>

job

:

script

:   - uname -a   - bundle exec rspec/<code>

注意:有時,>


before_script

用於定義一個命令,該命令在每個作業之前運行。必須是一個數組。指定的script與主腳本中指定的任何腳本串聯在一起,並在單個shell中一起執行。


after_script

用於定義將在每個作業(包括失敗的作業)之後運行的命令。這必須是一個數組。指定的腳本在新的shell中執行,與任何before_script或script腳本分開。

可以在全局定義,也可以在job中定義。在job中定義會覆蓋全局。

<code>

before_script

: - echo

"before-script!!"

variables

:

DOMAIN

: example.com ​

stages

: - build - deploy ​

build

:

before_script

:   - echo

"before-script in job"

stage

: build

script

:   - echo

"mvn clean "

  - echo

"mvn install"

after_script

:   - echo

"after> ​ ​

deploy

:

stage

: deploy

script

:   - echo

"hello deploy"

   

after_script

: - echo

"after-script"

/<code>


after_script失敗不會影響作業失敗。


GitLabCI系列之流水線語法第一部分


before_script失敗導致整個作業失敗,其他作業將不再執行。作業失敗不會影響after_script運行。


GitLabCI系列之流水線語法第一部分


stages

用於定義作業可以使用的階段,並且是全局定義的。同一階段的作業並行運行,不同階段按順序執行。

<code>stages:

-

build

-

test

-

deploy/<code>

這裡定義了三個階段,首先build階段並行運行,然後test階段並行運行,最後deploy階段並行運行。deploy階段運行成功後將提交狀態標記為passed狀態。如果任何一個階段運行失敗,最後提交狀態為failed。

未定義stages

全局定義的stages是來自於每個job。如果job沒有定義stage則默認是test階段。如果全局未定義stages,則按順序運行 build,test,deploy。


GitLabCI系列之流水線語法第一部分


如果作業中定義了其他階段,例如"codescan"則會出現錯誤。原因是因為除了build test deploy階段外的其他階段作為.pre運行(也就是作為第一個階段運行,需要將此作業的stage指定為.pre)。

<code>

codescan

:

stage

: .pre

script

:   - echo

"codescan"

/<code>


GitLabCI系列之流水線語法第一部分


定義stages控制stage運行順序

一個標準的yaml文件中是需要定義stages,可以幫助我們對每個stage進行排序。

<code>stages:

-

build

-

test

-

codescan

-

deploy/<code>


GitLabCI系列之流水線語法第一部分


.pre & .post

.pre始終是整個管道的第一個運行階段,.post始終是整個管道的最後一個運行階段。 用戶定義的階段都在兩者之間運行。.pre和.post的順序無法更改。如果管道僅包含.pre或.post階段的作業,則不會創建管道。


GitLabCI系列之流水線語法第一部分



stage

是按JOB定義的,並且依賴於全局定義的stages 。 它允許將作業分為不同的階段,並且同一stage作業可以並行執行(取決於特定條件 )。

<code>

unittest

:

stage

: test

script

:   - echo

"run test"

   

interfacetest

:

stage

: test

script

:   - echo

"run test"

/<code>


GitLabCI系列之流水線語法第一部分


可能遇到的問題: 階段並沒有並行運行。

在這裡我把這兩個階段在同一個runner運行了,所以需要修改runner每次運行的作業數量。默認是1,改為10.


GitLabCI系列之流水線語法第一部分


vim
/etc/gitlab-runner/config.toml 更改後自動加載無需重啟。

<code>

concurrent

=

10

/<code>


variables

定義變量,pipeline變量、job變量、Runner變量。job變量優先級最大。


分享到:


相關文章: