repair-agent ebe555216b
Some checks failed
Build and Deploy Backend / build-and-deploy (push) Failing after 1m14s
fix(cicd): capture actual build/deploy logs in failure report
Replace docker/build-push-action with shell command to capture
stdout/stderr. Include real error output in Log Center report
so repair agent can diagnose CI/CD failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:32:57 +08:00

129 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build and Deploy Backend
on:
push:
branches:
- main
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
config-inline: |
[registry."docker.io"]
mirrors = ["https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub.rat.dev"]
- name: Login to Huawei Cloud SWR
uses: docker/login-action@v2
with:
registry: ${{ secrets.SWR_SERVER }}
username: ${{ secrets.SWR_USERNAME }}
password: ${{ secrets.SWR_PASSWORD }}
- name: Build and Push Backend
id: build
run: |
docker buildx build \
--push \
--provenance=false \
--tag ${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/rtc-backend:latest \
. 2>&1 | tee /tmp/build.log
echo "build_exit_code=${PIPESTATUS[0]}" >> $GITHUB_OUTPUT
exit ${PIPESTATUS[0]}
- name: Setup Kubectl
run: |
curl -LO "https://files.m.daocloud.io/dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/
- name: Deploy to K3s
uses: Azure/k8s-set-context@v3
with:
method: kubeconfig
kubeconfig: ${{ secrets.KUBE_CONFIG }}
- name: Update K8s Manifests
id: deploy
run: |
# 1. 判断分支,决定使用哪个配置文件
if [[ "${{ github.ref_name }}" == "main" || "${{ github.ref_name }}" == "master" ]]; then
echo "Environment: Production"
DEPLOY_FILE="k8s/backend-deployment-prod.yaml"
INGRESS_FILE="k8s/ingress.yaml"
DEPLOY_NAME="rtc-backend"
else
echo "Environment: Development"
DEPLOY_FILE="k8s/backend-deployment-dev.yaml"
INGRESS_FILE="k8s/ingress-dev.yaml"
DEPLOY_NAME="rtc-backend-dev"
fi
# 2. 替换镜像地址
sed -i "s|\${CI_REGISTRY_IMAGE}/backend:latest|${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/rtc-backend:latest|g" $DEPLOY_FILE
# 3. 应用配置并捕获输出
{
kubectl apply -f $DEPLOY_FILE
kubectl apply -f $INGRESS_FILE
kubectl rollout restart deployment/$DEPLOY_NAME
} 2>&1 | tee /tmp/deploy.log
- name: Report failure to Log Center
if: failure()
run: |
# 收集构建和部署日志(取最后 50 行)
BUILD_LOG=""
DEPLOY_LOG=""
FAILED_STEP="unknown"
if [ -f /tmp/build.log ]; then
BUILD_LOG=$(tail -50 /tmp/build.log | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
FAILED_STEP="build"
fi
if [ -f /tmp/deploy.log ]; then
DEPLOY_LOG=$(tail -50 /tmp/deploy.log | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
if [ -n "$DEPLOY_LOG" ]; then
FAILED_STEP="deploy"
fi
fi
# 如果构建日志为空action 级别失败),标记步骤
if [ -z "$BUILD_LOG" ] && [ -z "$DEPLOY_LOG" ]; then
BUILD_LOG="No captured output. Check Gitea Actions UI for details."
FAILED_STEP="pre-build"
fi
ERROR_LOG="${BUILD_LOG}${DEPLOY_LOG}"
curl -s -X POST "https://qiyuan-log-center-api.airlabs.art/api/v1/logs/report" \
-H "Content-Type: application/json" \
-d "{
\"project_id\": \"rtc_backend\",
\"environment\": \"${{ github.ref_name }}\",
\"level\": \"ERROR\",
\"source\": \"cicd\",
\"commit_hash\": \"${{ github.sha }}\",
\"repo_url\": \"https://gitea.airlabs.art/zyc/rtc_backend.git\",
\"error\": {
\"type\": \"CICDFailure\",
\"message\": \"[${FAILED_STEP}] Build and Deploy failed on branch ${{ github.ref_name }}\",
\"stack_trace\": [\"${ERROR_LOG}\"]
},
\"context\": {
\"workflow\": \"${{ github.workflow }}\",
\"run_id\": \"${{ github.run_id }}\",
\"branch\": \"${{ github.ref_name }}\",
\"actor\": \"${{ github.actor }}\",
\"failed_step\": \"${FAILED_STEP}\",
\"commit\": \"${{ github.sha }}\"
}
}" || true