本文是《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
: buildscript
: - echo"mvn clean "
- echo"mvn install"
after_script
: - echo"after>
deploy
:stage
: deployscript
: - echo"hello deploy"
after_script
: - echo"after-script"
/<code>
after_script失敗不會影響作業失敗。
before_script失敗導致整個作業失敗,其他作業將不再執行。作業失敗不會影響after_script運行。
stages
用於定義作業可以使用的階段,並且是全局定義的。同一階段的作業並行運行,不同階段按順序執行。
<code>stages:-
build-
test-
deploy/<code>
這裡定義了三個階段,首先build階段並行運行,然後test階段並行運行,最後deploy階段並行運行。deploy階段運行成功後將提交狀態標記為passed狀態。如果任何一個階段運行失敗,最後提交狀態為failed。
未定義stages
全局定義的stages是來自於每個job。如果job沒有定義stage則默認是test階段。如果全局未定義stages,則按順序運行 build,test,deploy。
如果作業中定義了其他階段,例如"codescan"則會出現錯誤。原因是因為除了build test deploy階段外的其他階段作為.pre運行(也就是作為第一個階段運行,需要將此作業的stage指定為.pre)。
<code>codescan
:stage
: .prescript
: - echo"codescan"
/<code>
定義stages控制stage運行順序
一個標準的yaml文件中是需要定義stages,可以幫助我們對每個stage進行排序。
<code>stages:-
build-
test-
codescan-
deploy/<code>
.pre & .post
.pre始終是整個管道的第一個運行階段,.post始終是整個管道的最後一個運行階段。 用戶定義的階段都在兩者之間運行。.pre和.post的順序無法更改。如果管道僅包含.pre或.post階段的作業,則不會創建管道。
stage
是按JOB定義的,並且依賴於全局定義的stages 。 它允許將作業分為不同的階段,並且同一stage作業可以並行執行(取決於特定條件 )。
<code>unittest
:stage
: testscript
: - echo"run test"
interfacetest
:stage
: testscript
: - echo"run test"
/<code>
可能遇到的問題: 階段並沒有並行運行。
在這裡我把這兩個階段在同一個runner運行了,所以需要修改runner每次運行的作業數量。默認是1,改為10.
vim
/etc/gitlab-runner/config.toml 更改後自動加載無需重啟。
<code>concurrent
=10
/<code>
variables
定義變量,pipeline變量、job變量、Runner變量。job變量優先級最大。