feat: 增加数据初始化一键脚本 #24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy DRF Application | |
| on: | |
| push: | |
| branches: | |
| - dev | |
| paths-ignore: | |
| - 'readme.md' | |
| pull_request: | |
| branches: | |
| - dev | |
| paths-ignore: | |
| - 'readme.md' | |
| - 'script' | |
| jobs: | |
| build_and_deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 检出代码 | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| # 安装 docker-compose | |
| - name: Install Docker Compose | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y docker-compose | |
| # 生成时间戳镜像标签 | |
| - name: Generate image tag | |
| run: echo "IMAGE_TAG=dev-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV | |
| # 构建 Docker 镜像 | |
| - name: Build Docker image | |
| run: IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml build | |
| # 启动容器 | |
| - name: Run Docker container | |
| run: IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml up -d | |
| # 检查容器状态 | |
| - name: Check container status | |
| id: container_status | |
| run: | | |
| CONTAINER_NAME=$(IMAGE_TAG=${{ env.IMAGE_TAG }} docker-compose -f docker-compose.yml ps -q | head -n 1) | |
| if [ -z "$CONTAINER_NAME" ]; then | |
| echo "No containers found, failing the step." | |
| exit 1 | |
| fi | |
| STATUS=$(docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME") | |
| if [ "$STATUS" != "true" ]; then | |
| echo "Container is not running, failing the step." | |
| exit 1 | |
| fi | |
| echo "Container is running successfully." | |
| # 登录到 kworlds's Docker Hub | |
| - name: Login to Kworlds's Docker Hub | |
| run: docker login dockerhub.kworlds.cn -u ${{ vars.DOCKER_HUB_USERNAME }} -p ${{ secrets.DOCKER_HUB_PASSWORD }} | |
| # 推送镜像到 kworlds's Docker Hub | |
| - name: Push Docker image to Kworlds's Docker Hub | |
| if: success() | |
| run: docker push dockerhub.kworlds.cn/pure-drf-api:${{ env.IMAGE_TAG }} | |
| # 获取dev标签旧镜像的digest | |
| - name: Get old dev tag digest from Docker Hub | |
| run: | | |
| OLD_DIGEST=$(curl -sI -u ${{ vars.DOCKER_HUB_USERNAME }}:${{ secrets.DOCKER_HUB_PASSWORD }} \ | |
| -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ | |
| https://dockerhub.kworlds.cn/v2/pure-drf-api/manifests/dev | \ | |
| awk -F': ' '/^[Dd]ocker-[Cc]ontent-[Dd]igest:/ {gsub(/\r/, "", $2); print $2}') | |
| echo "OLD_DIGEST=$OLD_DIGEST" >> $GITHUB_ENV | |
| # 将新镜像标签修改为dev并推送 | |
| - name: Tag and push new image with dev tag | |
| if: success() | |
| run: | | |
| docker tag dockerhub.kworlds.cn/pure-drf-api:${{ env.IMAGE_TAG }} dockerhub.kworlds.cn/pure-drf-api:dev | |
| docker push dockerhub.kworlds.cn/pure-drf-api:dev | |
| # 删除旧dev镜像manifest | |
| - name: Delete old dev tag manifest from Docker Hub | |
| if: success() | |
| run: | | |
| if [ -n ${{ env.OLD_DIGEST }} ]; then | |
| curl -X DELETE -u ${{ vars.DOCKER_HUB_USERNAME }}:${{ secrets.DOCKER_HUB_PASSWORD }} \ | |
| https://dockerhub.kworlds.cn/v2/pure-drf-api/manifests/${{ env.OLD_DIGEST }} | |
| else | |
| echo "No old digest found to delete." | |
| exit 1 | |
| fi | |
| # 更新开发环境镜像并重启容器,清理垃圾镜像 | |
| - name: Deploy to remote server | |
| if: success() | |
| run: | | |
| sshpass -p "${{ secrets.HOST_USER_PASSWORD }}" ssh -o StrictHostKeyChecking=no ${{ vars.HOST_USER_NAME }}@${{ vars.HOST }} << EOF | |
| docker login dockerhub.kworlds.cn -u "${{ vars.DOCKER_HUB_USERNAME }}" -p "${{ secrets.DOCKER_HUB_PASSWORD }}" | |
| cd "${{ vars.COMPOSE_FILE_PATH }}" | |
| docker-compose pull | |
| docker-compose down | |
| docker-compose up -d | |
| docker exec dockerhub registry garbage-collect /etc/docker/registry/config.yml | |
| EOF | |