如何删除GitHub Actions运行时生成的临时工件?
清理GitHub Actions临时工件的方法
因为你的工件需要跨作业使用,所以要等所有依赖它的作业完成后,再执行清理步骤。下面是两种实用的实现方式:
方法一:使用官方删除动作(推荐)
GitHub官方维护了actions/delete-artifact动作,直接调用就能删除指定名称的工件,简单高效:
# 放在工作流的最后一个作业里(比如独立的cleanup作业,或者最后一个作业的末尾) - name: 删除临时工件 uses: actions/delete-artifact@v2 with: name: setup # 指定要删除的工件名称,和上传时的name一致
如果有多个临时工件,重复这个步骤即可,每个步骤指定不同的name。
方法二:通过GitHub API删除(适合批量或自定义场景)
如果需要批量删除或者更灵活的控制,可以调用GitHub的REST API来删除工件,需要用到默认的GITHUB_TOKEN(已具备删除权限):
- name: 通过API删除临时工件 run: | # 获取目标工件的ID ARTIFACT_ID=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts" \ | jq -r '.artifacts[] | select(.name == "setup") | .id') # 如果找到ID就执行删除 if [ -n "$ARTIFACT_ID" ]; then curl -X DELETE -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/repos/${{ github.repository }}/actions/artifacts/$ARTIFACT_ID" fi shell: bash
注意事项
- 一定要把清理步骤放在所有需要该工件的作业之后,比如可以创建一个专门的
cleanup作业,通过needs参数依赖前面的作业:jobs: build: # 你的构建、上传工件作业 test: needs: build # 下载工件、执行测试的作业 cleanup: needs: test runs-on: ubuntu-latest steps: - name: 删除临时工件 uses: actions/delete-artifact@v2 with: name: setup - 如果你使用的是GitHub托管的运行器,
jq工具默认已经安装,无需额外配置。
内容的提问来源于stack exchange,提问作者hmdevno
相关产品推荐
相关产品推荐

