Files
app-product/.gitea/workflows/build.yml
编码猿 3a8eb105a6
All checks were successful
build and push / build-and-push (push) Successful in 1m34s
vasss
2025-10-07 04:01:52 +08:00

78 lines
2.7 KiB
YAML
Raw 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
# 当代码推送到 main 分支时触发
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: 上传 app-product.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: |
# 删除该仓库的所有镜像
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: |
# 切换到管理员,要不然没权限在服务器执行 docker 命令,部署到 Swarm 集群
sudo docker stack deploy -c ${{ vars.SSH_MANAGE_PATH }}/${{ vars.DOCKER_SWARM_YML }} ${{ vars.DOCKER_IMAGE_NAME }}