您好,登錄后才能下訂單哦!
.gitlab-ci.yml?用來配置?CI?用你的項目中做哪些操作,這個文件位于倉庫的根目錄。
當有新內容?push?到倉庫,或者有代碼合并后,?GitLab?會查找是否有?.gitlab-ci.yml?文件,如果文件存在,?Runners?將會根據該文件的內容開始?build?本次?commit?。
.gitlab-ci.yml?使用?YAML?語法, 你需要格外注意縮進格式,要用空格來縮進,不能用?tabs?來縮進。
Stages?表示構建階段,說白了就是上面提到的流程。默認有3個?stages?:?build?,?test?,?deploy?。我們可以在一次?Pipeline?中定義多個?Stages?,這些?Stages?會有以下特點:
所有?Stages?會按照順序運行,即當一個?Stage?完成后,下一個?Stage?才會開始
只有當所有?Stages?完成后,該構建任務 (Pipeline) 才會成功
如果任何一個?Stage?失敗,那么后面的?Stages?不會執行,該構建任務 (Pipeline) 失敗
Jobs?表示構建工作,表示某個?Stage?里面執行的工作。我們可以在?Stages?里面定義多個?Jobs?,這些 Jobs 會有以下特點:
1、相同?Stage?中的?Jobs?會并行執行
2、相同?Stage?中的?Jobs?都執行成功時,該?Stage?才會成功
3、如果任何一個?Job?失敗,那么該?Stage?失敗,即該構建任務 (Pipeline) 失敗
任務中必須得有?script?部分。
# 定義 stages(階段)。任務將按此順序執行。
stages:
- build
- test
- deploy
# 定義 job(任務)
job1:
? stage: test
? tags:
? - XX #只有標簽為XX的runner才會執行這個任務
? only:
? - dev #只有dev分支提交代碼才會執行這個任務。也可以是分支名稱或觸發器名稱
? - /^future-.*$/ #正則表達式,只有future-開頭的分支才會執行
? script:
? - echo "I am job1"
? - echo "I am in test stage"
# 定義 job
job2:
? stage: test #如果此處沒有定義stage,其默認也是test
? only:
? - master #只有master分支提交代碼才會執行這個任務
? script:
? - echo "I am job2"
? - echo "I am in test stage"
? allow_failure: true #允許失敗,即不影響下步構建
# 定義 job
job3:
? stage: build
? except:
? - dev #除了dev分支,其它分支提交代碼都會執行這個任務
? script:
? - echo "I am job3"
? - echo "I am in build stage"
# 定義 job
.job4: #對于臨時不想執行的job,可以選擇在前面加個".",這樣就會跳過此步任務,否則你除了要注釋掉這個job4外,還需要注釋上面為deploy的stage
? ? stage: deploy
? ? script:
? ? - echo "I am job4"
# 模板,相當于公用函數,有重復任務時很有用
.job_template: &job_definition # 創建一個錨,'job_definition'
? image: ruby:2.1
? services:
? - postgres
? - redis
test1:
? <<: *job_definition # 利用錨'job_definition'來合并
? script:
? - test1 project
test2:
? <<: *job_definition # 利用錨'job_definition'來合并
? script:
? - test2 project
#下面幾個都相當于全局變量,都可以添加到具體job中,這時會被子job的覆蓋
before_script:
- echo "每個job之前都會執行"
- export MVN_HOME
- export JAVA_HOME
- java -version
- sh /home/gitlab-runner/kill.sh
after_script:
- echo "每個job之后都會執行"
variables: #變量
? DATABASE_URL: "postgres://postgres@postgres/my_database" #在job中可以用${DATABASE_URL}來使用這個變量。常用的預定義變量有CI_COMMIT_REF_NAME(項目所在的分支或標簽名稱),CI_JOB_NAME(任務名稱),? ? ? ? ? CI_JOB_STAGE(任務階段)
? GIT_STRATEGY: "none" #GIT策略,定義拉取代碼的方式,有3種:clone/fetch/none,默認為clone,速度最慢,每步job都會重新clone一次代碼。我們一般將它設置為none,在具體任務里設置為fetch就可以滿足需求,畢竟不是每步都需要新代碼,那也不符合我們測試的流程
cache: #緩存
? #因為緩存為不同管道和任務間共享,可能會覆蓋,所以有時需要設置key
? key: ${CI_COMMIT_REF_NAME} # 啟用每分支緩存。
? #key: "$CI_JOB_NAME/$CI_COMMIT_REF_NAME" # 啟用每個任務和每個分支緩存。需要注意的是,如果是在windows中運行這個腳本,需要把$換成%
? untracked: true #緩存所有Git未跟蹤的文件
? paths: #以下2個文件夾會被緩存起來,下次構建會解壓出來
? - node_modules/
? - dist/
如果你的?commit?信息包涵?[ci skip]?或者?[skip ci]?,不論大小寫,這個?commit?將會被創建,但是?job?會被跳過
版本回滾
stages:
-? build
-? deploy
build_job:
? stage: build
? tags:?
? - test1
? script:
? - echo "this is a test !"
dev_job:
? stage: deploy
? tags:?
? - test1
? environment:?
? ? name: v2
? ??url:? http://www.test.com
? script:
? - echo "this is a deploy !"
environment: 是配置在deploy這個stage里面的,用于后面Environments可以做版本回滾。
紅色部分是URL,回滾的時候點擊即可直接跳轉到指定位置。
stages:
-? build
-? deploy
build_job:
? stage: build
? tags:?
? - test1
? script:
? - echo "this is a test !"
dev_job:
? stage: deploy
? tags:?
? - test1
? environment:?
? ? name: v2
? ??url:??www.baidu.com
? script:
? - echo "this is a deploy !"
? when: always #不管前面幾步成功與否,永遠會執行這一步。它有幾個值:on_success (默認值)\on_failure\always\manual(手動執行)
每次提交代碼就會自動觸發構建并自動發布,production的構建發布需要手動點擊按鈕,這個是when: manual實現的。
when?用于實現在出現故障或運行失敗時運行的作業。
when?可以設置為以下值之一:
on_success?- 只有當前一個階段的所有工作成功時才執行工作。這是默認值。
on_failure?- 僅當前一個階段的至少一個作業發生故障時才執行作業。
always?- 無論前一階段的工作狀況如何,繼續執行工作。
manual?- 手動執行作業(在GitLab 8.10中添加)
所有jobs的執行環境為指定的docker image所生成的container,每個job都會生成一個container并且在job結束后立即銷毀。
Pull policies
當你使用docker 或 docker+machine executors時,你可以通過設置pull_policy來決定Runner如何pull docker image。pull_policy有三種值:
always —— Runner始終從遠程pull docker image。
if-not-present —— Runner會首先檢查本地是否有該image,如果有則用本地的,如果沒有則從遠程拉取。
never —— Runner始終使用本地的image。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。