iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

CD

  • 在我們執行完 Unit testing 之後,我們會把 release 的版本丟到 production 上,之後再進行持續的監控

  • 基本上,建立 action 的方法是一樣的,但我們最後要達成的目的不同,所以yml寫起來的感覺會差不多

我聽說 yml 跟 yaml 還有分派別的

建立 Action

# 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 }}
  • 幾本上這裡的 Action 會跟 CI 時一樣
  • 但是我們前篇有說過,要幫自己的Release Image 加上 version,所以這裡的on push 會不太一樣
  • 我們 CD 會在更新版本的時候(也就是使用git tag)才進行
  • *.*.* 就是我們前篇說到的 semver 語意化版本, 只要是版本號符合這個格式的都會去觸發
    • ex : 2.0.0、0.3.5

Git Tag

  • 簡單的兩個tag語法
# 幫她加 tag
git tag -a 0.0.1 -m "Test CD workflow"

# 把 tag 推上 branch
git push --tags

#  或是 push 順便推上去
git push origin master --tags

看一下 Action

  • 當我們把 Tag推上去以後,就滿足了CD觸發的條件
  • 所以這時候CD就會開始運作

注意事項

  • 假如你只在 push 的地方寫 tag,沒有指定 branch的話,有可能會和我一樣 CD 觸發不了,所以這時候要去把branches寫出來
on:
  push:
    branches: [ master ]
    tags:
      - '*.*.*'
  • 如果想要對github action語法有更多認識 也可以到下面連結看
    Github Action

上一篇
Day22 - 語意化版本
下一篇
Day24 - Fuzzing Test v.s Unit Testing
系列文
Golang X DevOps30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言