GitHub Actions + Docker 持續整合工作流

青山依舊發表於2021-07-12

前言

本文講解如何使用 GitHub Actions 配合 docker 進行開發部署過程中的持續整合工作流。

學習本文之前需要有些許 Dockerfile 基礎,可通過我前面的文章進行學習:Docker 快速部署 Node express 專案

至於為什麼使用 GitHub Actions,這裡引用官方:

在 GitHub Actions 的倉庫中自動化、自定義和執行軟體開發工作流程。 您可以發現、建立和共享操作以執行您喜歡的任何作業(包括 CI/CD),並將操作合併到完全自定義的工作流程中。

建立Actions檔案

當然,GitHub Actions 基於 git 倉庫。 在自己專案的 git 倉庫中,選擇 Actions 選單點選 set up a workflow yourself -> 自動建立 yml 檔案。

7701626086152_.pic.jpg

也可以在IDE中 專案根目錄下 手動建立 .github/workflows 目錄,新建 name.yml 檔案(name隨意名字,可以工作流功能取名)。

WeChat529ef8045faf5b1b1bfcbf3e9b1f0305.png

選擇工作流模板

我們目前的工作是 更新程式碼+構建映象+提交映象 + 伺服器pull映象+啟動容器。 GitHub Actions 並不推薦操作伺服器內容,所以我們只需要讓actions自動完成前面幾步即可。

與 Docker 有關,在 git marketplace 中 查詢 docker actions,找到了一項非常符合我們的工作流模板 Build and push Docker images

7711626086271_.pic_hd.jpg

進入模板詳情複製程式碼到 name.yml 檔案中,並加以修改。

# 工作流程的名稱
name: Docker Image CI

# 觸發條件:當branch觸發push(push,merge Pull Request),且 tag 為 image.xxx 時觸發工作流。
on:
  push:
    tags: image.*
    
# 工作流程,可包含多個作業
jobs:

  # 作業1名稱
  build:
    # 指定的執行器環境
    runs-on: ubuntu-latest
    
    # 作業包含一系列任務,稱為 steps
    steps:
      # 檢出當前程式碼(觸發工作流時的commits)
      - name: Checkout
        uses: actions/checkout@v2
        
      # setup-qemu 如果您想使用 QEMU 新增模擬支援以便能夠針對更多平臺進行構建,則 action 會很有用
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
        
      # setup-buildxaction 將預設使用docker-container 構建器驅動程式建立和引導構建器。非必需
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      
      # 登入到阿里雲容器映象服務
      - name: Login to Ali Docker
        uses: docker/login-action@v1
        # 配置登入資訊,secrets 變數在 github settings -> secrets 中設定
        with:
          registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
          username: ${{ secrets.ALI_DOCKER_HUB_USN }}
          password: ${{ secrets.ALI_DOCKER_HUB_PWD }}

      # 構建映象並上傳到阿里雲容器映象倉庫 (自行百度建立自己的映象倉庫)
      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
複製程式碼

檢視工作流日誌

工作流觸發後,可在 GitHub Actions 中檢視日誌。

7731626088531_.pic.jpg

綠色√標記已完成並且成功。

部署到伺服器

進入伺服器終端,啟動 Docker 容器

# 停止並移除正在執行的容器
docker stop docker-name
docker rm docker-name

# 拉取最新的映象
docker pull registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
# 啟動容器
docker run -d -p 3000:3000 --name=docker-name registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
複製程式碼

致謝

GitHub Actions 文件:docs.github.com/cn/actions/…

Benny技術部落格乾貨滿滿:www.benny.wiki

轉載宣告: 請註明作者,註明原文連結,有疑問致郵 kingwyh1993@163.com

相關文章