Files
app-product/.gitea/workflows/build.yml
编码猿 a2dad87e52
Some checks failed
build and push / build-and-push (push) Failing after 2m23s
重新部署
2025-10-07 20:57:45 +08:00

88 lines
3.5 KiB
YAML
Raw Permalink 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.

name: build and push
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: 拉取最新代码
uses: actions/checkout@v4
- name: 设置 Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 登录到自己的 Docker 仓库
uses: docker/login-action@v3
with:
registry: ${{ vars.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 构建并推送镜像
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_IMAGE_NAME }}:latest
${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_IMAGE_NAME }}:${{ github.sha }}
- name: 替换镜像标签为 github.sha
run: |
sed -i "s|{{IMAGE_TAG}}|${{ github.sha }}|g" ${{ vars.DOCKER_SWARM_YML }}
- name: 上传 swarm.yml 到前端集群管理机
uses: appleboy/scp-action@v1
with:
host: ${{ vars.SSH_MANAGE }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ vars.PORT }}
source: ${{ vars.DOCKER_SWARM_YML }}
target: ${{ vars.SSH_MANAGE_PATH }}
- name: 登录前端集群,拉镜像
uses: appleboy/ssh-action@v1
with:
# 统一登录三台前端集群的linux统一拉取刚推到仓库的最新镜像
# 解决 Swarm 无法控制 工作机拉取镜像的问题!
host: ${{ vars.SSH_HOST_LIST }}
sync: true
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ vars.PORT }}
script: |
# 因为正在运行的镜像被占用了,所以下面命令无法删除,只能删除从前没在使用的老镜像
# 然后拉取最新镜像,所有 服务器内部会有两个镜像:最新的,和上一个版本的镜像
# 挺好的保留上一版前端出bug了镜像可以退回去。如果不想保留上一版本
# 那么需要在这里 先 docker stack rm 停止等待5秒后再删除镜像即可.
# docker stack rm ${{ vars.DOCKER_IMAGE_NAME }}
# sleep 5
# 同样的如果用了这个代码那么下面8384行则之间注释即可
# 删除该仓库的所有镜像
docker images --format "{{.ID}}" ${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_IMAGE_NAME }} | xargs -r docker rmi -f
# 拉取刚打包的最新镜像
docker pull ${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_IMAGE_NAME }}:${{ github.sha }}
- name: 管理节点部署到 Swarm
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.SSH_MANAGE }}
sync: true
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ vars.PORT }}
script: |
# 先停止之前的 swarm 并等待5秒后再重新运行要不然用的还是之前老镜像
docker stack rm ${{ vars.DOCKER_IMAGE_NAME }}
sleep 5
# 切换到管理员,要不然没权限在服务器执行 docker 命令,部署到 Swarm 集群
sudo docker stack deploy -c ${{ vars.SSH_MANAGE_PATH }}${{ vars.DOCKER_SWARM_YML }} ${{ vars.DOCKER_IMAGE_NAME }}