From dcef2df38e4f8ee8ef997e0b4f62459d071b0c09 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Wed, 12 Aug 2026 12:27:33 +0800 Subject: [PATCH] =?UTF-8?q?fix=F0=9F=90=9B:=20=E9=99=90=E5=88=B6=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=AD=A5=E9=AA=A4=E4=BB=85=E5=9C=A8=20master=20?= =?UTF-8?q?=E6=94=B6=E5=88=B0=20push=20=E6=97=B6=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本工作流同时由 push 与 pull_request 触发,而推送镜像与重启服务两步没有 任何事件限制。其后果是:任何指向 master 的 PR 一经创建,就会把 PR 分支 构建出的镜像推送到镜像仓库,并 docker rm -f 掉线上容器、用该镜像重新启 动 API 服务——发生在代码被审查和合并之前。 同仓库分支发起的 PR 可以取到 secrets,因此该路径实际可达;历史运行记录 中已多次出现由 pull_request 事件触发的成功部署。 为两步加上 event_name 与 ref 双重判断。额外判断 ref 是考虑到日后若有人 向 on.push.branches 追加分支,部署不会随之扩散。 Tidy 与 Build 不受影响,PR 仍会执行编译校验。 --- .github/workflows/build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e159b041..cfaad7ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,12 @@ jobs: - name: Build run: env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -tags "sqlite3,json1" --ldflags "-extldflags -static" -o main . + # 以下推镜像与重启步骤仅在 master 收到 push 时执行。 + # pull_request 事件同样会触发本工作流,若不加限制,任何指向 master 的 + # PR 一经创建就会把 PR 分支的镜像推上仓库,并直接重启线上 API 服务, + # 且发生在合并之前。构建与编译校验不受影响,PR 仍会执行。 - name: Build the Docker image and push + if: github.event_name == 'push' && github.ref == 'refs/heads/master' run: | docker login --username=${{ secrets.DOCKER_USERNAME }} registry.ap-northeast-1.aliyuncs.com --password=${{ secrets.DOCKER_PASSWORD }} echo "************ docker login end" @@ -43,6 +48,7 @@ jobs: echo "************ docker push end" - name: Restart server # 第五步,重启服务 + if: github.event_name == 'push' && github.ref == 'refs/heads/master' uses: appleboy/ssh-action@0ff4204d59e8e51228ff73bce53f80d53301dee2 # v1.2.5 env: GITHUB_SHA_X: ${GITHUB_SHA}