You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Action中按分支条件执行systemd服务重启

问题分析与修复

你的GitHub Action配置问题出在dev分支步骤的条件逻辑错误,导致条件判断不符合预期。另外可以简化分支判断表达式,让逻辑更清晰。

核心问题

原dev步骤的条件使用了||(逻辑或):

if: ${{ !contains(github.ref_name, 'release') || github.ref != 'refs/heads/release' }}

这个逻辑冗余且容易混乱——!contains(github.ref_name, 'release')已经包含了"不是release主分支"的情况(release主分支的github.ref_name就是"release",contains会返回true,取反后为false),额外的||判断完全多余,反而可能在边缘分支触发非预期行为。

修复后的配置

如果你的需求是:

  • 所有release相关分支(包括release主分支、release/v1.0这类前缀分支)执行release步骤
  • 其他分支(比如dev)执行dev步骤

修正后的配置如下:

- name: Restart App Server release
        uses: appleboy/ssh-action@master
        # 匹配release主分支及所有以release/开头的分支
        if: contains(github.ref_name, 'release')
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            cd $HOME/www/${{secrets.HOST_PATH_PROD}}/${{secrets.HOST_PROJECT}}
            deno upgrade
            sudo /etc/init.d/nginx reload
            sudo systemctl daemon-reload
            sudo systemctl restart ${{secrets.META_SERVICE_PROD}}
      - name: Restart App Server development
        uses: appleboy/ssh-action@master
        # 仅当分支不包含release标识时执行
        if: !contains(github.ref_name, 'release')
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            cd $HOME/www/${{secrets.HOST_PATH_DEV}}/${{secrets.HOST_PROJECT}}
            deno upgrade
            sudo /etc/init.d/nginx reload
            sudo systemctl daemon-reload
            sudo systemctl restart ${{secrets.META_SERVICE_DEV}}

精准分支匹配(可选)

如果你希望仅release主分支和dev分支分别执行对应步骤(排除feature等其他分支),可以改为:

- name: Restart App Server release
        uses: appleboy/ssh-action@master
        if: github.ref_name == 'release'
        with:
          # 同上述配置内容
      - name: Restart App Server development
        uses: appleboy/ssh-action@master
        if: github.ref_name == 'dev'
        with:
          # 同上述配置内容

补充说明

GitHub Action的if条件对uses步骤完全生效,不需要放到run块中。修正逻辑后,分支判断就能按照预期触发对应步骤。

内容的提问来源于stack exchange,提问作者chovy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:00:57