Quantcast
Channel: 小惡魔 – 電腦技術 – 工作筆記 – AppleBOY
Viewing all articles
Browse latest Browse all 325

用 GitHub Actions 部署 Go 語言服務

$
0
0

GitHub Actions 也推出一陣子了,相信有不少雷,也是有很多優勢,未來在 GitHub 上面串接任何開源專案,都可以免費使用,過幾年可以看看 GitHub Actions 對 Travis 的影響是多少?本篇要來介紹如何透過 GitHub Actions 來部署 Go 語言服務,會用一個簡單 httpd 範例教大家如何透過 Docker 方式來更新。使用 Go 語言基本服務流程大致上會是『測試 -> 編譯 -> 上傳 -> 啟動』,透過這四個步驟來學習 GitHub Actions 該如何設定。

  • 測試: Unit Testing 多一層保護
  • 編譯: 透過 go build 編譯出 Binary 檔案
  • 上傳: 寫 Dockerfile 將 Binary 包進容器內
  • 啟動: 透過 docker-compose 方式來更新服務

影片介紹

同步放在 Udemy 平台上面,有興趣的可以直接參考底下:

啟動 GitHub Actions

只要在專案內建立 .github/workflows/ 目錄,裡面可以放置多個 YAML 檔案,上傳至 GitHub,就可以開始使用了。我們先在該目錄建立一個 deploy.yml 檔案

name: Build and Test
on:
  push:
    branches:
      - master
  pull_request:
jobs:
  lint:
    strategy:
      matrix:
        platform: [ubuntu-latest, windows-latest, macos-latest]
    runs-on: ${{ matrix.platform }}
    steps:
    - name: hello world
      run: |
        echo "Hello World"

可以看到現在可以直接在 GitHub 上面執行 Ubuntu 或 Windows 或 MacOS,詳細版本資訊可以參考這邊。接著針對 GO 語言四個步驟來分別撰寫 YAML 設定。

Go 語言流程

第一個步驟是下載專案原始碼,這邊跟其他 CI/CD 工具不一樣的是預設流程不會 checkout source code,必須要自己指定。

steps:
- name: Check out code
  uses: actions/checkout@v1

第二個步驟是安裝 Go 語言環境,原因 Ubuntu 環境預設是空的,所以任何語言都需要再額外安裝:

strategy:
  matrix:
    go-version: [1.13.x]
steps:
- name: Install Go
  uses: actions/setup-go@v1
  with:
    go-version: ${{ matrix.go-version }}

第三步驟是測試

- name: Tesing
  run: |
    go test -v .

第四步驟是編譯 binary 檔案

- name: Build binary
  run: |
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -o release/linux/amd64/helloworld

第五個步驟是將 binary 檔案包成容器上傳到 Docker Hub:

- name: Publish to Registry
  uses: elgohr/Publish-Docker-Github-Action@2.9
  with:
    name: appleboy/helloworld
    username: appleboy
    password: ${{ secrets.docker_password }}
    dockerfile: docker/helloworld/Dockerfile.linux.amd64

其中 Dockerfile 內容為:

FROM plugins/base:linux-amd64

LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
  org.label-schema.name="helloworld" \
  org.label-schema.vendor="Bo-Yi Wu" \
  org.label-schema.schema-version="1.0"

EXPOSE 8080

COPY release/linux/amd64/helloworld /bin/

ENTRYPOINT ["/bin/helloworld"]

最後步驟為連線到遠端伺服器並重新啟動服務,最簡單方式就是透過 docker-compose 來重新啟動。這邊透過 ssh-actions

- name: Update the API service
  uses: appleboy/ssh-action@v0.0.6
  with:
    host: ${{ secrets.ssh_host }}
    username: deploy
    key: ${{ secrets.ssh_key }}
    script_stop: true
    script: |
      cd golang && docker-compose pull && docker-compose up -d

全部設定檔如下:

name: Build and Test
on:
  push:
    branches:
      - master
  pull_request:
jobs:
  build:
    strategy:
      matrix:
        platform: [ubuntu-latest]
    runs-on: ${{ matrix.platform }}
    steps:
    - name: Install Go
      uses: actions/setup-go@v1
      with:
        go-version: ${{ matrix.go-version }}

    - name: Check out code
      uses: actions/checkout@v1

    - name: Tesing
      run: |
        make test

    - name: Build binary
      run: |
        make build_linux_amd64

    - name: Publish to Registry
      uses: elgohr/Publish-Docker-Github-Action@2.9
      with:
        name: appleboy/helloworld
        username: appleboy
        password: ${{ secrets.docker_password }}
        dockerfile: docker/helloworld/Dockerfile.linux.amd64

    - name: Update the API service
      uses: appleboy/ssh-action@v0.0.6
      with:
        host: ${{ secrets.ssh_host }}
        username: deploy
        key: ${{ secrets.ssh_key }}
        script_stop: true
        script: |
          cd golang && docker-compose pull && docker-compose up -d

使用容器當做基底

從上面的設定檔我會有個疑問,就是每一個 Job 都要從最初始化安裝環境,像上面就是安裝 Go 語言環境。那能不能直接選用 Go 官方提供的容器當作基底,這樣就可以少裝一個步驟,答案是可以的,每一個 Job 都可以指定不同的容器來啟動

jobs:
  build:
    strategy:
      matrix:
        platform: [ubuntu-latest]
    runs-on: ${{ matrix.platform }}
    container: golang:1.13

上面這段意思是就是,先拿 Ubuntu 當作系統,在上面跑 golang:1.13,這樣 build 這個 Job 就是以官方的容器當作基底做後續處理。也就是不再依賴 actions/setup-go@v1 套件了。

心得

雖然 GitHub Actions 已經正式 Release 了,但是要用在 Production 可能還需要等一陣子,原因是貿然轉換過來,需要一些時間來確認是否全部的流程都有人寫成 Plugin 放在 Marketplace,找不到的話,就必須要自己去撰寫,有好處也有壞處。


Viewing all articles
Browse latest Browse all 325

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes