diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..f3db7db --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,78 @@ +name: lpt-infra Manual Deploy + +on: + workflow_dispatch: + inputs: + environment: + description: '部署环境(all/dev/prod)' + required: true + type: choice + options: + - all + - dev + - prod + +env: + REPO_URL: http://git.cat-shark.xyz/cat-shark/lpt-infra.git + KUBECTL_VERSION: v1.36.2 + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + run: | + set -euo pipefail + git clone "$REPO_URL" . + git checkout "${{ gitea.sha }}" + + - name: Setup kubectl + run: | + set -euo pipefail + curl -sLO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl" + chmod +x kubectl + mv kubectl /usr/local/bin/ + mkdir -p ~/.kube + echo "${{ secrets.KUBECONFIG_B64 }}" | base64 -d > ~/.kube/config + + - name: Apply manifests + run: | + set -euo pipefail + ENV="${{ inputs.environment }}" + case "$ENV" in + all) + echo "Applying dev/ ..." + kubectl apply -f dev/ + echo "Applying prod/ ..." + kubectl apply -f prod/ + ;; + dev) + echo "Applying dev/ ..." + kubectl apply -f dev/ + ;; + prod) + echo "Applying prod/ ..." + kubectl apply -f prod/ + ;; + *) + echo "ERROR: unknown environment=$ENV" + exit 1 + ;; + esac + + - name: Verify status + run: | + set -euo pipefail + ENV="${{ inputs.environment }}" + case "$ENV" in + all) + kubectl get deploy,pods -n lpt-dev + kubectl get deploy,pods -n lpt-prod + ;; + dev) + kubectl get deploy,pods -n lpt-dev + ;; + prod) + kubectl get deploy,pods -n lpt-prod + ;; + esac diff --git a/README.md b/README.md index de73e66..8918017 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,20 @@ kubectl apply -f dev/ kubectl apply -f prod/ ``` +## 手动部署流水线 + +`lpt-infra` 提供 Gitea Actions 手动流水线(`.gitea/workflows/deploy.yml`),只支持手动触发,不会随 push 自动执行。 + +使用方式: + +1. 在 lpt-infra 仓库配置 Secret `KUBECONFIG_B64`(kubeconfig 的 base64)。 +2. Gitea → lpt-infra → Actions → Run workflow。 +3. 选择 `environment`:`all` / `dev` / `prod`。 + +流水线会 checkout 最新代码并执行 `kubectl apply -f dev/` 或 `kubectl apply -f prod/`。 + +注意:整目录 apply 会把 Deployment 镜像 tag 重置为清单中的 `:dev` / `:prod`;如果 app CI 用不可变 tag 管理镜像,建议 app 发布后不要立即整目录 apply,或只 apply 本次变更的清单。 + ## Traefik