@@ -25,20 +25,24 @@ jobs:
2525 run : |
2626 sudo apt-get update
2727 sudo apt-get install -y docker-compose
28+
29+ # 生成时间戳镜像标签
30+ - name : Generate image tag
31+ run : echo "IMAGE_TAG=dev-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
2832
2933 # 构建 Docker 镜像
3034 - name : Build Docker image
31- run : docker-compose -f docker-compose-dev .yml build
35+ run : IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml build
3236
33- # 检查镜像是否能成功启动一个容器
37+ # 启动容器
3438 - name : Run Docker container
35- run : docker-compose -f docker-compose-dev .yml up -d
39+ run : IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml up -d
3640
3741 # 检查容器状态
3842 - name : Check container status
3943 id : container_status
4044 run : |
41- CONTAINER_NAME=$(docker-compose -f docker-compose-dev .yml ps -q | head -n 1)
45+ CONTAINER_NAME=$(IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml ps -q | head -n 1)
4246 if [ -z "$CONTAINER_NAME" ]; then
4347 echo "No containers found, failing the step."
4448 exit 1
5761 # 推送镜像到 kworlds's Docker Hub
5862 - name : Push Docker image to Kworlds's Docker Hub
5963 if : success()
60- run : docker push dockerhub.kworlds.cn/pure-drf-api:dev
64+ run : docker push dockerhub.kworlds.cn/pure-drf-api:${{ env.IMAGE_TAG }}
65+
66+ # 获取dev标签旧镜像
67+ - name : Delete old dev tag from Docker Hub
68+ run : |
69+ OLD_DIGEST=$(curl -sI -u ${{ vars.DOCKER_HUB_USERNAME }}:${{ secrets.DOCKER_HUB_PASSWORD }} \
70+ -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
71+ https://dockerhub.kworlds.cn/v2/pure-drf-api/manifests/dev | \
72+ awk -F': ' '/^[Dd]ocker-[Cc]ontent-[Dd]igest:/ {gsub(/\r/, "", $2); print $2}')
73+
74+ # 将新镜像标签修改为dev并推送
75+ - name : Tag and push new image with dev tag
76+ if : success()
77+ run : |
78+ docker tag dockerhub.kworlds.cn/pure-drf-api:${{ env.IMAGE_TAG }} dockerhub.kworlds.cn/pure-drf-api:dev
79+ docker push dockerhub.kworlds.cn/pure-drf-api:dev
6180
62- # 更新开发环境镜像并重启容器
81+ # 删除旧dev镜像
82+ - name : Delete old dev tag from Docker Hub
83+ if : success()
84+ run : |
85+ f [ -n "$OLD_DIGEST" ]; then
86+ curl -X DELETE -u ${{ vars.DOCKER_HUB_USERNAME }}:${{ secrets.DOCKER_HUB_PASSWORD }} \
87+ https://dockerhub.kworlds.cn/v2/pure-drf-api/manifests/$OLD_DIGEST
88+ else
89+ echo "No old digest found to delete."
90+ exit 1
91+ fi
92+
93+ # 更新开发环境镜像并重启容器,清理垃圾镜像
6394 - name : Deploy to remote server
6495 if : success()
6596 run : |
69100 docker-compose pull
70101 docker-compose down
71102 docker-compose up -d
103+ docker exec -it dockerhub registry garbage-collect /etc/docker/registry/config.yml
72104 EOF
0 commit comments