Files
xgj/setup-env/examples/full-deployment.yml

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