上次我們講完了 only 操作方式,接下來我們要來講解 needs 操作方式,讓我們的 CI/CD 更加仔細,更加完整。
needs 可以在我們整個 CI/CD 流程,去定義在哪個工作之前做完,才會去做下一個工作,假設今天有三個工作,分別叫 "test-build"、"build-docker-image"、"deploy-to-development",在 build-docker-image 工作指定 needs 在 "test-build" 工作做完時,才會去做 "build-docker-image",另外在 "deploy-to-development" 工作指定 needs 在 "build-docker-image" 做完時,才會去做 "deploy-to-development" 這項工作。
在我們的工作定義 needs,然後寫上我們定義的工作名稱,就可完成這定義。
stages:
- testing
- build
test-build:
stage: testing
script:
- echo '測試打包'
only:
- main
- develop
build-docker-image:
stage: build
needs:
- test-build
script:
- echo '打包 docker image'
only:
- main
- develop
接下來我們將上次練習的 CI/CD 練習專案,加上 needs 來看會有什麼變化,以下是我們加上 needs 範例。
stages:
- testing
- build
- deploy
run-unit-test:
stage: testing
before_script:
- echo '安裝套件'
script:
- echo '執行單元測試'
after_script:
- echo '刪除不必要資源'
only:
- main
- develop
test-build:
stage: testing
needs:
- run-unit-test
script:
- echo '測試打包'
only:
- main
- develop
build-docker-image:
stage: build
needs:
- test-build
script:
- echo '打包 docker image'
only:
- main
- develop
deploy-to-development:
stage: deploy
needs:
- build-docker-image
script:
- echo '佈署伺服器 develop'
only:
- develop
deploy-to-production:
stage: deploy
needs:
- build-docker-image
script:
- echo '佈署伺服器 production'
only:
- main
接下來我們 push 上去,上面有四個工作運作完成,但是上面會多一個東西叫做,Group jobs by 這個模組,這兩個模組一個叫 Stage 另一個叫 Job dependencies。Stage 可以看我們有那些工作在運行,有如以下圖示。
Job dependencies 可以看我們先前定義的 needs 有沒有配置正確。可以切換到 Job dependencies 裡面有一個叫 Show dependencies 這個把它打開,可以看到裡面有線路,這就是我們有定義 needs,gitlab 會幫我們將線路畫出來。