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

Github Actions条件满足时指定步骤未执行问题求助

Github Actions备份步骤未触发的问题解决

我在代码仓库中运行一个用于部署应用的Github Actions工作流,包含两个核心步骤:检查远程服务器上的Docker镜像是否存在,若存在则执行镜像备份。工作流的原配置如下:

- name: Check if latest image exists
  id: check_latest_image
  uses: appleboy/ssh-action@master
  with:
    host: ${{ env.SSH_HOST }}
    username: ${{ env.SSH_USER }}
    password: ${{ env.SSH_PASSWORD }}
    key: ${{ env.SSH_PRIVATE_KEY }}
    port: ${{ env.SSH_PORT }}
    script: |
      if docker image inspect crm/api-publisher-consumer:latest &> /dev/null;
      then
        echo "::set-output name=image_exists::true"
      else  
        echo "::set-output name=image_exists::false"
      fi

- name: Backup previous state
  if: steps.check_latest_image.outputs.image_exists == 'true'
  uses: appleboy/ssh-action@master
  with:
    host: ${{ env.SSH_HOST }}
    username: ${{ env.SSH_USER }}
    password: ${{ env.SSH_PASSWORD }}
    key: ${{ env.SSH_PRIVATE_KEY }}
    port: ${{ env.SSH_PORT }}
    script: |
      cd ~/TestServer/crm/crm-api
      docker tag crm/api-publisher-consumer:latest crm/api-publisher-consumer:backup

按预期,check_latest_image步骤会设置输出参数image_exists为true,后续Backup previous state步骤会根据该条件判断是否执行。但实际运行时,尽管检查步骤的日志显示已输出image_exists的值,备份步骤始终未运行:

======CMD======
if docker image inspect crm/api-publisher-consumer:latest &> /dev/null;
then
  echo "::set-output name=image_exists::'true'"
else  
  echo "::set-output name=image_exists::'false'"
fi

======END======
out: ::set-output name=image_exists::'true'
==============================================
✅ Successfully executed commands to all host.
==============================================

问题原因

从日志可以看到,实际输出的image_exists值是'true'(带有单引号),而工作流中判断条件是steps.check_latest_image.outputs.image_exists == 'true'——这里比较的是不带单引号的字符串true,两者不匹配,因此条件不成立,备份步骤不会执行。

解决方案

修改check_latest_image步骤中的echo语句,去掉true和false两侧的单引号,确保输出的是纯字符串值:

- name: Check if latest image exists
  id: check_latest_image
  uses: appleboy/ssh-action@master
  with:
    host: ${{ env.SSH_HOST }}
    username: ${{ env.SSH_USER }}
    password: ${{ env.SSH_PASSWORD }}
    key: ${{ env.SSH_PRIVATE_KEY }}
    port: ${{ env.SSH_PORT }}
    script: |
      if docker image inspect crm/api-publisher-consumer:latest &> /dev/null;
      then
        echo "::set-output name=image_exists::true"
      else  
        echo "::set-output name=image_exists::false"
      fi

验证效果

修改后,检查步骤的输出会变为::set-output name=image_exists::true(不带单引号),此时判断条件steps.check_latest_image.outputs.image_exists == 'true'会正确匹配,备份步骤将按预期执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:45:26