Github Action中Docker Run步骤如何根据npm build结果设置退出码?
解决Docker Run步骤退出码不反映npm run build结果的问题
可以通过在执行脚本中捕获npm run build的退出码,让脚本最终以该退出码结束,从而让容器的退出码与构建结果保持一致,这样Github Action就能正确识别步骤是否失败。
修改后的步骤配置如下:
- name: Build uses: addnab/docker-run-action@v3 with: image: node options: -v ${{ github.workspace }}:/app run: | cp -rf src/data/Config_TST.js src/data/Config.js rm -rf node_modules npm install npm run build-css # 执行构建命令并记录退出码 npm run build --production BUILD_EXIT_CODE=$? # 继续执行后续的复制操作(若不需要可移除) cp -a web.config build/ # 以构建命令的退出码结束脚本 exit $BUILD_EXIT_CODE
原理说明
原脚本中,docker-run-action会以容器内最后一条命令(即cp -a web.config build/)的退出码作为步骤的退出状态,而这条命令通常会执行成功,所以无论构建是否失败,步骤都返回0。通过记录npm run build --production的退出码到变量BUILD_EXIT_CODE,最后用exit $BUILD_EXIT_CODE让脚本以该退出码结束,容器的退出码就会与构建结果绑定,Github Action就能根据这个退出码判断步骤是否成功。
可选优化:让脚本在命令失败时立即终止
如果希望前面的命令(如npm install)失败时也直接终止步骤,可以在脚本开头添加set -e,这样任何命令执行失败都会立即退出脚本,容器的退出码就是失败命令的退出码:
- name: Build uses: addnab/docker-run-action@v3 with: image: node options: -v ${{ github.workspace }}:/app run: | set -e cp -rf src/data/Config_TST.js src/data/Config.js rm -rf node_modules npm install npm run build-css npm run build --production cp -a web.config build/
这种方式下,只要任何一条命令失败,脚本就会立即停止,步骤也会标记为失败,适合需要严格校验每一步的场景。
内容的提问来源于stack exchange,提问作者csaba
相关产品推荐
相关产品推荐

