Github Actions:如何从失败的作业中获取堆栈跟踪
如何在Github Actions失败时获取Docker Build的堆栈跟踪并添加到Jira工单
可以实现,Github Actions没有直接提供现成的作业堆栈跟踪输出,但可以通过以下几种方式捕获失败日志并传入Jira:
1. 直接捕获Docker Build步骤的输出日志
这是最直接的方式,在Docker Build步骤中把输出保存到文件,再提取为步骤输出:
- 首先修改Docker Build步骤,开启错误管道并把日志写入文件,同时允许步骤失败后继续执行:
- name: Build Docker image id: docker-build run: | set -o pipefail # 把stdout和stderr都写入日志文件,同时输出到控制台 docker build . 2>&1 | tee docker-build-log.txt continue-on-error: true - 然后提取日志内容(可根据需要截断避免超出输出限制),设置为步骤输出:
- name: Extract build failure log id: extract-log if: failure() && steps.docker-build.outcome == 'failure' run: | # 截断日志到前150行,防止超过Github输出大小限制 TRUNCATED_LOG=$(cat docker-build-log.txt | head -150) # 把日志内容写入GITHUB_OUTPUT echo "content<<EOF" >> $GITHUB_OUTPUT echo "$TRUNCATED_LOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT
2. 通过Github API获取整个作业的日志
如果需要完整的作业日志(不止Docker Build步骤),可以调用Github REST API获取:
- name: Fetch full job logs id: fetch-job-logs if: failure() run: | # 调用API获取作业日志,需要GITHUB_TOKEN权限 FULL_LOG=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "${{ github.api_url }}/repos/${{ github.repository }}/actions/jobs/${{ github.run_id }}/logs") # 同样可以截断后写入输出 TRUNCATED_LOG=$(echo "$FULL_LOG" | head -200) echo "content<<EOF" >> $GITHUB_OUTPUT echo "$TRUNCATED_LOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT
默认的GITHUB_TOKEN已经包含读取作业日志的权限,无需额外配置。
3. 将日志传入Jira工单
在创建Jira工单的步骤中,直接引用前面步骤的输出作为工单描述:
- name: Create Jira bug ticket if: failure() && steps.docker-build.outcome == 'failure' uses: atlassian/gajira-create@v3 with: project: YOUR_PROJECT_KEY # 替换为你的Jira项目Key issuetype: Bug summary: "Docker Build Failed: ${{ github.workflow }} - Run #${{ github.run_number }}" description: | **Workflow**: ${{ github.workflow }} **Run Link**: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} **Failure Log**: ``` ${{ steps.extract-log.outputs.content }} ``` env: JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
注意事项
- 日志大小限制:Github Actions单步输出最大为1MB,如果日志过长,建议截断或者将日志文件作为附件上传到Jira(可以用
atlassian/gajira-attach动作实现)。 - 权限验证:确保Jira的相关密钥已正确存储在Github Secrets中。
- 步骤依赖:必须给Docker Build步骤加上
continue-on-error: true,否则步骤失败后整个作业会直接终止,无法执行后续的日志捕获和Jira创建步骤。
内容的提问来源于stack exchange,提问作者Donagh
相关产品推荐
相关产品推荐

