This commit is contained in:
1 parent
99b11d1a17
commit
a48ee17553
5 files changed
+143
No files matched your search
@@ -0,0 +1,59 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
# 同一分支只保留最新一次部署,避免并发发布互相覆盖容器
|
||||
concurrency:
|
||||
group: deploy-main
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
IMAGE: demo
|
||||
CONTAINER: demo
|
||||
HOST_PORT: "9121"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 构建镜像
|
||||
run: |
|
||||
docker build \
|
||||
--label "org.opencontainers.image.revision=${{ github.sha }}" \
|
||||
-t "$IMAGE:latest" \
|
||||
-t "$IMAGE:${{ github.sha }}" \
|
||||
.
|
||||
|
||||
- name: 滚动重启容器
|
||||
run: |
|
||||
docker rm -f "$CONTAINER" 2>/dev/null || true
|
||||
docker run -d \
|
||||
--name "$CONTAINER" \
|
||||
--restart unless-stopped \
|
||||
-p "127.0.0.1:${HOST_PORT}:80" \
|
||||
"$IMAGE:latest"
|
||||
|
||||
- name: 健康检查
|
||||
run: |
|
||||
for i in $(seq 1 15); do
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1:${HOST_PORT}/" || true)
|
||||
if [ "$code" = "200" ]; then
|
||||
echo "容器已就绪,HTTP $code"
|
||||
exit 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
echo "健康检查失败,最后状态码:$code"
|
||||
docker logs --tail 50 "$CONTAINER" || true
|
||||
exit 1
|
||||
|
||||
- name: 清理旧镜像
|
||||
run: |
|
||||
# 保留 latest 与当前提交的镜像,其余同仓库的悬空/历史镜像清掉
|
||||
docker image prune -f || true
|
||||
Reference in new issue
Block a user