mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
152 lines
4.9 KiB
YAML
152 lines
4.9 KiB
YAML
name: "多环境发布"
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
environment:
|
||
description: "部署环境"
|
||
required: true
|
||
default: "staging"
|
||
type: choice
|
||
options:
|
||
- staging
|
||
- production
|
||
- testing
|
||
version_type:
|
||
description: "版本类型"
|
||
required: true
|
||
default: "patch"
|
||
type: choice
|
||
options:
|
||
- patch
|
||
- minor
|
||
- major
|
||
custom_tags:
|
||
description: "自定义Docker标签(每行一个)"
|
||
required: false
|
||
default: ""
|
||
|
||
jobs:
|
||
release:
|
||
runs-on: ubuntu-latest
|
||
name: "发布到 ${{ github.event.inputs.environment }} 环境"
|
||
|
||
strategy:
|
||
matrix:
|
||
include:
|
||
- environment: staging
|
||
dockerfile: "./container/dev/Dockerfile"
|
||
app_env: "staging"
|
||
registry: "docker-registry.bjxgj.com"
|
||
namespace: "staging"
|
||
- environment: production
|
||
dockerfile: "./container/prod/Dockerfile"
|
||
app_env: "production"
|
||
registry: "docker-registry.bjxgj.com"
|
||
namespace: "production"
|
||
- environment: testing
|
||
dockerfile: "./container/test/Dockerfile"
|
||
app_env: "testing"
|
||
registry: "docker-registry.bjxgj.com"
|
||
namespace: "testing"
|
||
|
||
steps:
|
||
- name: 检出代码
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
token: ${{ secrets.GITEA_TOKEN }}
|
||
|
||
- name: 设置构建环境
|
||
uses: actions/xgj/setup-env@main
|
||
with:
|
||
docker-registry: ${{ matrix.registry }}
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
kube-config: ${{ secrets.KUBE_CONFIG }}
|
||
|
||
- name: 安装依赖
|
||
uses: actions/xgj/npm-install@main
|
||
with:
|
||
package-manager: "pnpm"
|
||
|
||
- name: 准备环境特定的标签
|
||
id: env_tags
|
||
run: |
|
||
ENVIRONMENT="${{ github.event.inputs.environment }}"
|
||
VERSION_TYPE="${{ github.event.inputs.version_type }}"
|
||
CUSTOM_TAGS="${{ github.event.inputs.custom_tags }}"
|
||
|
||
# 基础标签
|
||
TAGS="${ENVIRONMENT}"
|
||
TAGS="${TAGS}\n${ENVIRONMENT}-${VERSION_TYPE}"
|
||
TAGS="${TAGS}\n$(date +%Y%m%d)-${ENVIRONMENT}"
|
||
|
||
# 添加自定义标签
|
||
if [[ -n "$CUSTOM_TAGS" ]]; then
|
||
while IFS= read -r tag; do
|
||
if [[ -n "$tag" ]]; then
|
||
TAGS="${TAGS}\n${tag}-${ENVIRONMENT}"
|
||
fi
|
||
done <<< "$CUSTOM_TAGS"
|
||
fi
|
||
|
||
{
|
||
echo "tags<<EOF"
|
||
echo -e "$TAGS"
|
||
echo "EOF"
|
||
} >> $GITHUB_OUTPUT
|
||
|
||
echo "🏷️ 环境特定标签:"
|
||
echo -e "$TAGS" | sed 's/^/ - /'
|
||
|
||
- name: 发布构建
|
||
id: release
|
||
uses: actions/xgj/release-web@main
|
||
with:
|
||
gitea-token: ${{ secrets.GITEA_TOKEN }}
|
||
app-env: ${{ matrix.app_env }}
|
||
sentry-auth-token: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||
sentry-dsn: ${{ vars.SENTRY_DSN }}
|
||
enable-sentry: ${{ matrix.environment == 'production' && 'true' || 'false' }}
|
||
docker-registry: ${{ matrix.registry }}
|
||
dockerfile-path: ${{ matrix.dockerfile }}
|
||
release-command: "npm run release -- --release -V --increment ${{ github.event.inputs.version_type }}"
|
||
docker-tags: ${{ steps.env_tags.outputs.tags }}
|
||
|
||
- name: 部署到Kubernetes
|
||
run: |
|
||
ENVIRONMENT="${{ github.event.inputs.environment }}"
|
||
VERSION="${{ steps.release.outputs.version }}"
|
||
NAMESPACE="${{ matrix.namespace }}"
|
||
IMAGE="${{ matrix.registry }}/${{ github.event.repository.name }}:${VERSION}"
|
||
|
||
echo "🚀 部署到 ${ENVIRONMENT} 环境..."
|
||
echo "📦 版本: ${VERSION}"
|
||
echo "🐳 镜像: ${IMAGE}"
|
||
echo "📍 命名空间: ${NAMESPACE}"
|
||
|
||
kubectl set image deployment/web-app \
|
||
web-app=${IMAGE} \
|
||
-n ${NAMESPACE}
|
||
|
||
kubectl rollout status deployment/web-app -n ${NAMESPACE}
|
||
|
||
echo "✅ 部署完成!"
|
||
|
||
- name: 发布总结
|
||
run: |
|
||
echo "🎉 多环境发布完成!"
|
||
echo ""
|
||
echo "📋 发布信息:"
|
||
echo " - 环境: ${{ github.event.inputs.environment }}"
|
||
echo " - 版本: ${{ steps.release.outputs.version }}"
|
||
echo " - 版本类型: ${{ github.event.inputs.version_type }}"
|
||
echo " - Docker仓库: ${{ matrix.registry }}"
|
||
echo " - Kubernetes命名空间: ${{ matrix.namespace }}"
|
||
echo ""
|
||
echo "🏷️ 主要标签:"
|
||
echo " - latest(默认)"
|
||
echo " - prod(默认)"
|
||
echo " - ${{ steps.release.outputs.version }}(版本标签)"
|
||
echo " - ${{ github.event.inputs.environment }}(环境标签)"
|