# 完整部署示例 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