在我們執行完 Unit testing 之後,我們會把 release 的版本丟到 production 上,之後再進行持續的監控
基本上,建立 action 的方法是一樣的,但我們最後要達成的目的不同,所以yml
寫起來的感覺會差不多
我聽說 yml 跟 yaml 還有分派別的
# cd.yaml
name: Release My Image
on:
push:
branches: [ master ]
tags:
- '*.*.*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Login into Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Install Golang Env
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Checkout code
uses: actions/checkout@v2
- name: Install Go modules
run: go mod download
- name: Build
run: go build -v
- name: Build and push Docker image
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ github.event.repository.name }}:latest
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
*.*.*
就是我們前篇說到的 semver 語意化版本, 只要是版本號符合這個格式的都會去觸發
# 幫她加 tag
git tag -a 0.0.1 -m "Test CD workflow"
# 把 tag 推上 branch
git push --tags
# 或是 push 順便推上去
git push origin master --tags
push
的地方寫 tag,沒有指定 branch的話,有可能會和我一樣 CD 觸發不了,所以這時候要去把branches
寫出來on:
push:
branches: [ master ]
tags:
- '*.*.*'