1. 程式人生 > 其它 >.gitlab-ci.yml關鍵詞完整解析(一)

.gitlab-ci.yml關鍵詞完整解析(一)

技術標籤:我做雲原生那幾年

.gitlab-ci.yml關鍵詞完整解析(一)

使用GitLab自帶的流水線,必須要定義流水線的內容,而定義內容的檔案預設叫做.gitlab-ci.yml,使用yml的語法進行編寫。
目前任務關鍵詞有28個,全域性的關鍵詞有10個,兩者重疊的有很多。今天我給大家先講解一下常用的關鍵詞,掌握了這些關鍵詞的用法,你可以編寫邏輯嚴謹,易於擴充套件的流水線。

任務的28個關鍵詞分別是,
script, after_script, allow_failure, artifacts, before_script, cache, coverage, dependencies

, environment, except, extends, image, include, interruptible, only, pages, parallel, release, resource_group, retry, rules, services, stage, tags, timeout, trigger, variables, when

全域性的關鍵詞
image,services,before_script,after_script,tags,cache,artifacts,retry,timeout,interruptible

最常任務中最常用的是這七個script

artifactsstagewhentagsimagecache
下面我先來詳細介紹一下這七個關鍵詞,知道了這個七個關鍵詞,一般的流水線隨隨便便拿下,

script

任務要執行的shell指令碼內容,內容會被runner執行,在這裡,你不需要使用git clone ....克隆當前的專案,來進行操作,因為在流水線中,每一個的job的執行都會將專案下載,恢復快取這些流程,不需要你再使用指令碼恢復。你只需要在這裡寫你的專案安裝,編譯執行,如
npm install 另外值得一提的是,指令碼的工作目錄就是當前專案的根目錄,所有可以就像在本地開發一樣。此外script可以是單行或者多行

單行指令碼

job:
  script: npm install

多行指令碼

job:
  script:
    - npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
    - npm install --registry=http://registry.npm.taobao.org

***script***是一個job的必填內容,不可或缺。一個job最少有二個屬性,一個是job name, 任務名稱, 一個就是script。

image

指定一個基礎Docker映象作為基礎執行環境,經常用到的映象有node nginx docker

job:
  image: node:latest
  script: npm install

在上面這個任務中,如果不指定image: node:latest 執行下面的npm install時會報錯,找不到npm的命令。
image的作用就是給當前任務或者當前流水線設定一個基礎環境,有可能是nodejs,也有可能是java, go, php,
可以設定當前流水線的,也可以設定當前任務的。

artifacts

翻譯出來這個單詞就是製品,一個成品,作用是將流水線過程中的一些檔案,資料夾,打包壓縮,提供一個外鏈供人下載,另外還能在後續的job中快取。
比如我們構建一個前端專案後將dist目錄做成一個壓縮包,

build:
  script:
    - npm run build
  artifacts:
    paths:
      - dist/

在這個任務後面執行的任務會自動恢復這個製品,意味著你不用再執行npm run build來獲取編譯後的dist檔案了,
在安卓,ios打包的時候,非常有用,因為流水線最終輸出的就是一個可下載,可安裝的應用。
paths 是用來指定將那些檔案,目錄放入製品中,
也可以使用exclude關鍵詞,將那些目錄,檔案排除,支援正則表示式。
此外還有以下幾個屬性

  • paths 檔案路徑
  • exclude 排除的檔案
  • name 製品名稱
  • expose_as 在UI頁面匯出的名稱
  • untracked 布林型別,是否將git忽略的檔案加到製品中
  • when on_success;on_failure;always 何時上傳製品
  • expire_in 過期時間預設30天
  • reports 收集測試報告
build:
  script:
    - npm run build
  artifacts:
    paths:
      - dist/
    exclude:
      - binaries/**/*.o
    expose_as: 'artifact 1'
    name: "$CI_COMMIT_REF_NAME"
    untracked: false
    expire_in: 2 hrs 20 min
    when: on_failure

tags

tags 關鍵詞是用於指定Runner,tags的取值範圍是在該專案可見的runner tags中,可以在Setting =>CI/CD => Runner 中檢視的到。
要知道,改屬性可以設定全域性,不設定則預設使用公有Runner去執行流水線。每個任務可以指定一個Runner,可以指定多個標籤,但runner卻只能一個。以一個為準。tags是在我們註冊Runner是配置的,後續也可以更改。

install:
  tags:
    - hello-vue
    - docker
  script:
    - npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
    - npm install --registry=http://registry.npm.taobao.org

cache

快取是將當前工作環境目錄中的一些檔案,一些資料夾儲存起來,用於在各個任務初始化的時候恢復。避免多個下載同樣的包,能夠大大優化流水線效率。在前端專案中,我們經常把node_modules快取起來,這樣一條流水線都可以使用這些下載好的包。在java專案中經常把maven下載的包快取起來。以備後用
cache下的引數有

  • paths 當前工作環境下的目錄
  • key 儲存的key,key不變不會重新生成快取,