.gitlab-ci.yml 配置文件詳解

一.什麼是gitlab-ci.yml文件

GitLab提供持續集成服務。如果
將.gitlab-ci.yml文件添加到存儲庫的根目錄,並將GitLab項目配置爲使用Runner,則每次提交或推送都會觸發CI 管道。
該.gitlab-ci.yml文件是您配置CI如何處理項目的位置。它位於存儲庫的根目錄中。

在對存儲庫進行任何推送時,GitLab都會查找該.gitlab-ci.yml 文件,並根據該文件的內容在Runners上啓動作業。

因爲.gitlab-ci.yml是在存儲庫中並且受版本控制的,所以舊版本仍然可以成功構建,fork可以輕鬆使用CI,分支可以具有不同的管道和作業,並且您擁有CI的唯一真實來源。您可以.gitlab-ci.yml
在我們的博客中閱讀有關使用它的原因的更多信息

工作是:
定義了約束,指出應在什麼條件下執行它們。
具有任意名稱的頂級元素,並且必須至少包含script子句。
不限制可以定義多少個。

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"

作業名稱不可用
每個作業必須具有唯一的名稱,但是有一些保留keywords名稱不能用作作業名稱:

image
services
stages
types
before_script
after_script
variables
cache
include

二 配置參數詳解

stages

定義pipeline的全部階段(stage),階段內所有任務並行執行,全部執行成功開始下一階段任務,任何階段內任意job執行失敗都會導致pipeline失敗,所有stage,job執行成功後pipeline會顯示pass。如果未定義stages,則默認有build、test、deploy三個階段,如果未定義stage,則默認test階段

stages:
  - build
  - deploy
  - test

variables

在作業級別上定義作業變量。

script

由runner執行的shell腳本

image

使用的docker 鏡像,這裏docker鏡像的地址,也可用:image:name和image:entrypoint。

services

使用docker服務映像。也可用:services:name,services:alias,services:entrypoint,和services:command。

before_script

執行作業之前執行的一段shell腳本

after_script

執行完作業執行一段的shell腳本

stage

定義一個作業階段(默認值:)test。

only/except

用於設置作業策略以限制創建作業的時間

在這裏插入圖片描述
在這裏插入圖片描述

rules

件列表,用於評估和確定作業的選定屬性,以及是否創建該作業。不能與only/ 一起使用except

job:
  script: "echo Hello, Rules!"
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
      when: always
    - if: '$VAR =~ /pattern/'
      when: manual
    - when: on_success

retry

發生故障時可以自動重試作業的時間和次數。

timeout

定義自定義作業級別的超時,該超時優先於項目範圍的設置。

include

允許此作業包括外部YAML文件。也可用:include:local,include:file,include:template,和include:remote。

interruptible

定義在通過新的運行使其冗餘時是否可以取消作業。

resource_group

限製作業併發。

when

when 用於實現在發生故障或發生故障時運行的作業。

when 可以設置爲以下值之一:

on_success-僅當先前階段中的所有作業都成功(或因爲已標記,被視爲成功allow_failure)時才執行作業 。這是默認值。
on_failure -僅在前一階段中的至少一項作業失敗時才執行作業。
always -執行作業,而不管先前階段的作業狀態如何。
manual-手動執行作業(在GitLab 8.10中已添加)。在下面閱讀有關 手動操作的信息。
delayed-一定時間後執行作業(在GitLab 11.14中已添加)。在下面閱讀有關延遲動作的信息
stages:
  - build
  - cleanup_build
  - test
  - deploy
  - cleanup

build_job:
  stage: build
  script:
    - make build

cleanup_build_job:
  stage: cleanup_build
  script:
    - cleanup build when failed
  when: on_failure

test_job:
  stage: test
  script:
    - make test

deploy_job:
  stage: deploy
  script:
    - make deploy
  when: manual

cleanup_job:
  stage: cleanup
  script:
    - cleanup after jobs
  when: always

when:manual

手動操作是一種特殊類型的作業,不會自動執行,需要由用戶顯式啓動。手動操作的示例用法是部署到生產環境。可以從管道,作業,環境和部署視圖開始手動操作。在環境文檔中閱讀更多
內容。

手動操作可以是可選的或阻止的。阻止手動操作將在定義該操作的階段阻止管道的執行。當有人通過單擊播放按鈕執行阻止手動操作時,可以恢復管道的執行。

當管道被阻塞時,如果設置了“管道成功時合併”,則不會合並。阻塞的管道也確實具有特殊狀態,稱爲手動。使用when:manual語法時,默認情況下手動操作是非阻塞的。如果要進行手動操作阻止,則必須在中添加
allow_failure: false到作業的定義.gitlab-ci.yml。

environment

environment用於定義作業部署到特定環境。如果environment指定且不存在該名稱下的環境,則將自動創建一個新環境

environment:url

這是一個可選值,設置該值時,它將在GitLab中的不同位置顯示按鈕,單擊這些按鈕會將您帶到定義的URL。

在以下示例中,如果作業成功完成,它將在合併請求和環境/部署頁面中創建指向的按鈕

https://prod.example.com
deploy to production:
  stage: deploy
  script: git push production HEAD:master
  environment:
    name: production
    url: https://prod.example.com

參考文章:
https://docs.gitlab.com/ee/ci/yaml/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章