ci: Gitea Actions 流水线 — push 自动部署 test / 手动触发晋升 prod
deploy-test / build-and-deploy-test (push) Failing after 1m4s
deploy-test / build-and-deploy-test (push) Failing after 1m4s
- 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(避免重启生产容器), 晋升走镜像文件传输
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
# =============================================================================
|
||||
# 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"
|
||||
Reference in New Issue
Block a user