--- title: 【軟體】Github Actions 流程自動化 tags: TTennis Pickup Robot disqus: hackmd --- <h1 style="text-align: center; color: orange;"> 🛠️ 【軟體】必學的 Docker 🛠️ </h1> <h2 style="text-align: center; color: skyblue;">Github Actions 流程自動化</h2> <center> 在 Github 的 Repo 中有這麼一個標籤頁面 ![image](https://hackmd.io/_uploads/BymeAo3qR.png =95%x) 這個 Actions 是 Github 提供的自動化流程服務。 這裡會介紹最常見的功能,<font color="yellow">自動將 Image push 到 docker hub 上</font>。 </center> </br> --- <h3><font color ="magenza"> 1. 概念</font></h3> Github Action 本質就是在定義我們的 Workflow。 <center> :::info **Workflow (工作流程)** 是由 YAML 檔案定義的自動化過程,放在專案的 .github/workflows/ 目錄下。 每個 workflow 可以在特定的事件(如 push、pull request)發生時觸發。 ::: </center> 要觸發 action,必須在 repo 的根目錄創建資料夾,如下所示。 ![image](https://hackmd.io/_uploads/Hkebv13h50.png =90%x) 在 VSCode、Cursor 的擴充模組中,也能看到 Actions 的狀態: ![image](https://hackmd.io/_uploads/H1Ieg229A.png =40%x) </br> <h3><font color ="magenza"> 2. 範例:git push 觸發 docker push </font></h3> 1. <font color="yellow">首先,設定此 repository 專屬的 Github Actions Token。</font> :::info 這裡 USERNAME 和 ACCESS_TOKEN 是我的 docker 帳密。 (你不會希望自己 docker 帳密洩漏在 Github Repository 中 xD) ::: ![image](https://hackmd.io/_uploads/Sk0ix32cC.png) 2. <font color="yellow">根目錄新增 `./github/workflows/my_image.yml`。可自定義 yml 主檔名。</font> :::info 格式直接參照下方檔案。 改掉必要參數就可以了,有標註(改)者。 ::: ```yaml= ## 定義你的 Github Action 服務名稱(改) name: RTABMap Image on: ## 在 git push 時 push: ## 在 main branch 之下(改) branches: [ main ] # 以下檔案發生變更時,才會觸發工作流程(改) paths: - 3.Software/D.RTABMap/docker/Dockerfile - .github/workflows/rtabmap.yml jobs: docker: ## 讓 workflow 運行在最新版本的 Ubuntu 上 runs-on: ubuntu-latest steps: - ## 檢出專案的代碼,這是所有步驟的起點 name: Repo Checkout uses: actions/checkout@v3 - ## 使用 Docker 的元資料 Action 來設置映像標籤 name: Docker meta id: meta # Ref: https://github.com/docker/metadata-action uses: docker/metadata-action@v5 ## 設定 Docker Image 的 name 及 tag (改) with: images: ${{ secrets.DOCKERHUB_POM_USERNAME }}/ttennis-humble tags: rtabmap - ## 登入 Docker Hub name: Docker Hub Log-in uses: docker/login-action@v2 ## 從 Secrets 中獲取 Docker Hub 帳密(改) with: username: ${{ secrets.DOCKERHUB_POM_USERNAME }} password: ${{ secrets.DOCKERHUB_POM_ACCESS_TOKEN }} ## 使用 Docker build/push Action - name: Build Docker image uses: docker/build-push-action@v4 with: context: 3.Software/D.RTABMap/docker ## Dockerfile 所在目錄(改) load: true ## 將 Image 加載到 Docker 環境中 tags: ${{ steps.meta.outputs.tags }} ## 使用之前設置的 Image Tag push: false ## 不推送映像,只建立映像 ## 再次使用 Docker 的建置和推送 Action ## 將 build 和 push 分開做只是為了方便 debug - name: Push Docker image uses: docker/build-push-action@v4 with: context: 3.Software/D.RTABMap/docker ## Dockerfile 所在目錄(改) push: true ## 推送映像到 Docker Hub tags: ${{ steps.meta.outputs.tags }} ## 使用之前設置的 Image Tag ``` 3. <font color="yellow">git push 後去 github 上檢查 github action 運作。</font> </br> </br>