mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
108 lines
3.5 KiB
YAML
108 lines
3.5 KiB
YAML
# 完整部署示例
|
|
name: Full Build and Deploy Pipeline
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
environment:
|
|
description: '部署环境'
|
|
required: true
|
|
default: 'dev'
|
|
type: choice
|
|
options:
|
|
- dev
|
|
- staging
|
|
- prod
|
|
|
|
env:
|
|
REGISTRY: docker-registry.bjxgj.com
|
|
IMAGE_NAME: my-application
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
image-tag: ${{ steps.meta.outputs.tags }}
|
|
cache-hit: ${{ steps.setup.outputs.cache-hit }}
|
|
steps:
|
|
- name: 检出代码
|
|
uses: actions/checkout@v4
|
|
|
|
- name: 配置构建环境
|
|
id: setup
|
|
uses: actions/xgj/setup-env@v1
|
|
with:
|
|
docker-registry: ${{ env.REGISTRY }}
|
|
docker-username: ci-action
|
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
|
cache-key: 'build-${{ github.sha }}'
|
|
use-aliyun-mirror: 'true'
|
|
|
|
- name: 生成镜像元数据
|
|
id: meta
|
|
run: |
|
|
IMAGE_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}"
|
|
echo "tags=$IMAGE_TAG" >> $GITHUB_OUTPUT
|
|
echo "Generated image tag: $IMAGE_TAG"
|
|
|
|
- name: 构建 Docker 镜像
|
|
run: |
|
|
docker build \
|
|
--tag ${{ steps.meta.outputs.tags }} \
|
|
--label "org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}" \
|
|
--label "org.opencontainers.image.revision=${{ github.sha }}" \
|
|
--label "org.opencontainers.image.created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
|
|
.
|
|
|
|
- name: 推送镜像
|
|
run: |
|
|
docker push ${{ steps.meta.outputs.tags }}
|
|
|
|
- name: 构建摘要
|
|
run: |
|
|
echo "## 🐳 构建信息" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **镜像**: ${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **缓存命中**: ${{ steps.setup.outputs.cache-hit }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Docker 版本**: ${{ steps.setup.outputs.docker-version }}" >> $GITHUB_STEP_SUMMARY
|
|
|
|
deploy:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
environment: ${{ inputs.environment }}
|
|
steps:
|
|
- name: 检出代码
|
|
uses: actions/checkout@v4
|
|
|
|
- name: 配置部署环境
|
|
id: setup
|
|
uses: actions/xgj/setup-env@v1
|
|
with:
|
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
|
kube-config: ${{ secrets[format('KUBE_CONFIG_{0}', inputs.environment)] }}
|
|
cache-key: 'deploy-${{ inputs.environment }}'
|
|
|
|
- name: 部署到 Kubernetes
|
|
run: |
|
|
# 替换镜像标签
|
|
sed -i "s|{{IMAGE_TAG}}|${{ needs.build.outputs.image-tag }}|g" k8s/deployment.yaml
|
|
|
|
# 应用配置
|
|
kubectl apply -f k8s/ -n ${{ inputs.environment }}
|
|
|
|
# 等待部署完成
|
|
kubectl rollout status deployment/my-application -n ${{ inputs.environment }} --timeout=300s
|
|
|
|
- name: 验证部署
|
|
run: |
|
|
# 检查 Pod 状态
|
|
kubectl get pods -n ${{ inputs.environment }} -l app=my-application
|
|
|
|
# 检查服务状态
|
|
kubectl get svc -n ${{ inputs.environment }} -l app=my-application
|
|
|
|
- name: 部署摘要
|
|
run: |
|
|
echo "## ☸️ 部署信息" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **环境**: ${{ inputs.environment }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **镜像**: ${{ needs.build.outputs.image-tag }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **kubectl 版本**: ${{ steps.setup.outputs.kubectl-version }}" >> $GITHUB_STEP_SUMMARY
|