上次我們了解 Pipeline 各自在做什麼是,今天來講解 Gitlab CI/CD 工作相依性,來了解 CI/CD 怎麼依據不同階段,進行工作。
首先我們先定義我們要做的工作,然後上傳到 GitLab,看結果怎麼樣
run-unit-test:
before_script:
- echo '安裝套件'
script:
- echo '執行單元測試'
after_script:
- echo '刪除不必要資源'
test-build:
script:
- echo '測試打包'
build-docker-image:
script:
- echo '打包 docker image'
deploy-to-production:
script:
- echo '佈署伺服器'
接著上傳至 Gitlab 跑 CI/CD,可以看到 CI/CD 腳本一起處理完成。
接下來我們上傳故意帶有錯誤的工作,看結過會怎麼樣
run-unit-test:
before_script:
- echo '安裝套件'
script:
- echo '執行單元測試
after_script:
- echo '刪除不必要資源'
test-build:
script:
- echo '測試打包'
build-docker-image:
script:
- echo '打包 docker image'
- alksdjfajslkd;fjalsdj
deploy-to-production:
script:
- echo '佈署伺服器'
這邊可以看到,CI/CD 雖然有錯誤不能運行的工作,但是其他工作還是照長處理
剛剛看到四個工作一起工作,雖然有一個工作有錯誤,但是其他工作還是照長處理,那是因為Gitlab CI/CD 這四個工作是平行處理,所以當一個工作有錯時,還是會處理其他工作。
那如果我們想要當有一個工作有錯誤時,其他工作就不要處理了,因為其他工作再做下去也沒有意義。那有沒有甚麼方式處理 ?
Gitlab CI/CD 有一個指令叫做 “stages”,他可以去定義我們工作流程階段,而在工作裡面定義 “stage”,宣告這個工作再什麼階段使用,當我們有一個工作有錯時,就不會繼續往後面工作做下去。讓我們來看範例。
stages:
- testing
- build
- deploy
run-unit-test:
stage: testing
before_script:
- echo '安裝套件'
script:
- echo '執行單元測試'
after_script:
- echo '刪除不必要資源'
test-build:
stage: testing
script:
- echo '測試打包'
build-docker-image:
stage: build
script:
- echo '打包 docker image'
- alksdjfajslkd;fjalsdj
deploy-to-production:
stage: deploy
script:
- echo '佈署伺服器'
定義好工作階段,讓我們來上傳到 Gitlab,並查看 CI/CD 工作狀態。
可以看到我們在 build 階段,工作出錯,後面的工作並不會往下執行。