Files
codex/.gitea/workflows/cd.yaml
T

82 lines
4.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 用途:這是 Gitea Actions 的 CD(持續部署)workflow。
# 當有 commit push 到 master 分支時觸發,流程分兩個 job 依序執行:
# 1. release-tag-version:釋出並標註成品版本,取得版本號。
# 2. docker-build-push:依上一步取得的版本號 docker build 映像檔,
# 並 push 到倉庫;倉庫主機由 vars.SERVER_DOMAIN 提供,
# 登入帳密由 secrets.USERNAME / secrets.PASSWORD 提供。
# 更新日期:2026/06/30 12:24:01
# =============================================================================
# workflow 名稱,會顯示在 Gitea Actions 介面上,方便辨識此流程
name: CD
# 觸發條件區塊,定義哪些事件會啟動此 workflow
on:
# 監聽 push 事件(有提交被推送到倉庫時)
push:
# 限定只有 push 到下列分支時才觸發,避免其他分支誤觸發部署
branches:
# 僅針對 master 分支(正式主線)觸發 CD
- master
# 工作(job)區塊,定義此 workflow 包含的所有 job
jobs:
# 第一個 job:負責釋出並標註成品版本,產出版本號供後續 job 使用
release-tag-version:
# job 的顯示名稱,呈現在 Actions 介面
name: Release Tag Version
# 指定執行此 job 的 runner 標籤(自架的 ubuntu runner
runs-on: ubuntu
# 定義此 job 對外輸出的值,供其他 job 透過 needs 引用
outputs:
# 將下方 id 為 release-tag-version 的 step 所輸出的 version
# 暴露為此 job 的 version 輸出,後續 docker-build-push 會用到
version: ${{ steps.release-tag-version.outputs.version }}
# 此 job 的執行步驟清單
steps:
# 步驟:執行外部 composite action 來釋出並標註成品版本
- name: 釋出並標註成品版本
# 設定 step 的 id,讓 outputs 能以 steps.release-tag-version 引用其輸出
id: release-tag-version
# 使用 Gitea 上的共用 composite action 取得版本號;
# 版本以變數 vars.ACTION_RELEASE_TAG_VERSION 釘選,便於統一管理 action 版本
uses: https://gitea.jsc.idv.tw/composite-actions/release-tag-version@${{ vars.ACTION_RELEASE_TAG_VERSION }}
# 第二個 job:建置 Docker 映像檔並推送到倉庫
docker-build-push:
# job 的顯示名稱
name: Docker Build & Push
# 指定執行此 job 的 runner 標籤(自架的 ubuntu runner
runs-on: ubuntu
# 宣告此 job 相依於 release-tag-version
# 確保版本號先產生完成才執行,並可透過 needs 取得其 outputs
needs: release-tag-version
# 此 job 的執行步驟清單
steps:
# 步驟:取出原始碼到 runner 工作目錄,後續 docker build 需要 Dockerfile 等檔案
- name: 取得存取庫
# 使用官方 checkout action;版本以變數 vars.ACTION_CHECKOUT_VERSION 釘選
uses: actions/checkout@${{ vars.ACTION_CHECKOUT_VERSION }}
# 步驟:登入 Docker 倉庫,取得推送映像檔的權限
- name: 登入倉庫
# 登入指令直接以表達式注入認證資訊:
# secrets.PASSWORD 為倉庫密碼、vars.SERVER_DOMAIN 為倉庫主機位址、
# secrets.USERNAME 為登入帳號;
# 密碼透過管線餵給 docker login 的 --password-stdin
# 避免密碼出現在指令參數中而被記錄於 log
run: echo ${{ secrets.PASSWORD }} | docker login ${{ vars.SERVER_DOMAIN }} -u ${{ secrets.USERNAME }} --password-stdin
# 指定以 bash 執行此指令
shell: bash
# 步驟:建置 Docker 映像檔
- name: 建置映像檔
# image 名稱由 vars.SERVER_DOMAIN(倉庫主機)與 gitea.repository(倉庫名稱)組成、
# 以 needs.release-tag-version.outputs.version(上一個 job 產生的版本號)為 tag,
# 對當前目錄(.)的 Dockerfile 進行 build
run: docker build -t ${{ vars.SERVER_DOMAIN }}/${{ gitea.repository }}:${{ needs.release-tag-version.outputs.version }} .
# 指定以 bash 執行此指令
shell: bash
# 步驟:將建置完成的映像檔推送到倉庫
- name: 推送映像檔
# push 與上一步相同名稱與 tag 的映像檔到 vars.SERVER_DOMAIN 指定的倉庫主機
run: docker push ${{ vars.SERVER_DOMAIN }}/${{ gitea.repository }}:${{ needs.release-tag-version.outputs.version }}
# 指定以 bash 執行此指令
shell: bash