Files
tianai-captcha-enhanced/.gitea/workflows/deploy-test.yml
T
abcv7 236ff19413
deploy-test / build-and-deploy-test (push) Failing after 1m4s
ci: Gitea Actions 流水线 — push 自动部署 test / 手动触发晋升 prod
- deploy-test.yml: push master → Maven容器构建 → 推 Registry :test/:sha-x → SSH重建test容器 → 健康检查
- promote-prod.yml: workflow_dispatch(confirm=yes) → test镜像 save/scp/load 到 prod1 → 备份旧镜像 → 重建 → 健康检查
- prod1 daemon 未配 insecure-registries(避免重启生产容器), 晋升走镜像文件传输
2026-08-26 09:58:15 +08:00

106 lines
4.1 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.
# =============================================================================
# TIANAI CAPTCHA PLATFORM — 测试环境自动部署
# 触发:push 到 master(或手动 workflow_dispatch
# 流程:checkout → Maven 容器构建 jar → docker build → 推 Registry(:test + :sha-x)
# → SSH 到测试机(156.233.226.86) 重建容器 → 健康检查
# 架构参考:perler-lab deploy-test.yml
# =============================================================================
name: deploy-test
on:
push:
branches: [master]
workflow_dispatch:
concurrency:
group: deploy-test-master
cancel-in-progress: false
env:
REGISTRY: 156.233.226.46:5000
IMAGE: 156.233.226.46:5000/tianai-captcha-platform
jobs:
build-and-deploy-test:
runs-on: ubuntu-latest
steps:
- name: Checkout master
uses: actions/checkout@v4
with:
ref: master
- name: Setup SSH key (from secrets)
run: |
mkdir -p ~/.ssh
printf '%s\n' "${{ secrets.CAPTCHA_DEPLOY_KEY }}" > ~/.ssh/id_ed25519_deploy
chmod 600 ~/.ssh/id_ed25519_deploy
ssh-keyscan -H ${{ secrets.CAPTCHA_TEST_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
ssh-keyscan -H ${{ secrets.CAPTCHA_PROD_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
echo "SSH 密钥就绪"
- name: Build jar (Maven + JDK21 in docker, 带依赖缓存卷)
run: |
set -e
docker volume create tianai-maven-cache >/dev/null 2>&1 || true
docker run --rm -v "$PWD":/ws -v tianai-maven-cache:/root/.m2 -w /ws \
maven:3.9-eclipse-temurin-21 mvn -q package -DskipTests
ls -la tianai-captcha-platform/target/*.jar
- name: Build & push image
run: |
set -e
SHA=$(echo "$GITHUB_SHA" | cut -c1-8)
# Dockerfile 约定 jar 在构建上下文根目录
cp tianai-captcha-platform/target/tianai-captcha-platform-*.jar \
tianai-captcha-platform/tianai-captcha-platform-2.0.0-SNAPSHOT.jar
docker build -t $IMAGE:test -t $IMAGE:sha-$SHA tianai-captcha-platform
docker push $IMAGE:test
docker push $IMAGE:sha-$SHA
echo "已推送 $IMAGE:test 和 $IMAGE:sha-$SHA"
- name: Deploy to test env
run: |
set -e
SSH_CMD="ssh -i $HOME/.ssh/id_ed25519_deploy root@${{ secrets.CAPTCHA_TEST_HOST }}"
$SSH_CMD '
set -e
echo "===== 拉取镜像 ====="
docker pull 156.233.226.46:5000/tianai-captcha-platform:test
echo "===== 重建容器 ====="
docker rm -f tianai-captcha 2>/dev/null || true
docker run -d --name tianai-captcha \
--network mw \
--restart unless-stopped \
-p 127.0.0.1:18200:18200 \
-v /opt/tianai/config:/app/config \
156.233.226.46:5000/tianai-captcha-platform:test
sleep 15
docker ps --filter name=tianai-captcha --format "{{.Names}} {{.Status}}"
docker logs tianai-captcha 2>&1 | tail -3
'
- name: Health check (generate API)
run: |
set -e
SSH_CMD="ssh -i $HOME/.ssh/id_ed25519_deploy root@${{ secrets.CAPTCHA_TEST_HOST }}"
OK=0
CODE=000
for i in $(seq 1 24); do
CODE=$($SSH_CMD 'curl -s -o /dev/null -w "%{http_code}" -X POST "http://127.0.0.1:18200/api/challenge/generate" -H "X-Site-Key: 6a062b70-c0b3-428e-8f1b-cca402e67ddb"' || echo 000)
if [ "$CODE" = "200" ]; then OK=1; break; fi
sleep 5
done
if [ "$OK" != "1" ]; then
echo "健康检查失败 (code=$CODE)"
$SSH_CMD 'docker logs tianai-captcha --tail 30' || true
exit 1
fi
echo "测试环境健康检查 OK (HTTP $CODE)"
- name: Deployment summary
if: always()
run: |
echo "commit: $GITHUB_SHA"
echo "test 访问: test 机 127.0.0.1:18200 (mw 网络: tianai-captcha:18200)"
echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"