我知道你可以在同一工作流程的不同作业之间共享构件...
但是,我如何在不同的工作流程之间共享构件?
我知道你可以在同一工作流程的不同作业之间共享构件...
但是,我如何在不同的工作流程之间共享构件?
GitHub现在添加了一个REST API用于下载构件。基本上,您可以这样做:
GET repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}
然后你需要在响应中查找Location:
,并访问该URL以下载工件。该URL有效期为1分钟。
有一个GitHub Action使用上述API,您可以轻松地将其添加到您的工作流程中。我使用它的方式如下
- name: Download artifact
uses: dawidd6/action-download-artifact@v2
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
workflow_conclusion: success
在这里阅读更多相关信息:https://github.com/dawidd6/action-download-artifact
with.workflow
? - Dimitri Kopriwa我已经能够使用actions/upload-artifact和actions/download-artifact在工作流之间共享数据,而无需使用第三方操作。
例如:microservice-A_pull_request.yml
on: workflow_run
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- ...
- name: Test Functional
run: make test-microservice-a-functional
- name: Store code coverage file
uses: actions/upload-artifact@v3
with:
name: coveragemicroservicea-${{ github.sha }}
path: coveragemicroservicea.out
然后是main.yml
:
name: PR
on:
pull_request:
branches:
- master
jobs:
microserviceAPR:
uses: auth0/sandcastle/.github/workflows/microservice-A_pull_request.yml@master
secrets: inherit
microserviceBPR:
uses: auth0/sandcastle/.github/workflows/microservice-B_pull_request.yml@master
secrets: inherit
coverage:
runs-on: ubuntu-latest
needs: [microserviceAPR, microserviceBPR]
timeout-minutes: 5
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install Go
uses: actions/setup-go@v3
with:
go-version-file: './go.mod'
- uses: actions/download-artifact@v3
with:
name: coveragemicroservicea-${{ github.sha }}
- uses: actions/download-artifact@v3
with:
name: coveragemicroserviceb-${{ github.sha }}
- name: Merge coverage files
id: getcoverage
run: |
output=$(make get-coverage)
echo "coverage=$output" >> $GITHUB_OUTPUT
- name: Comment on PR
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ steps.getcoverage.outputs.coverage }}'
})
可能目前还无法实现:
当工作流结束时,您可以在“Actions”选项卡中找到工作流运行记录并下载上传的工件的存档文件。GitHub目前没有提供REST API以检索上传的工件。
如果您需要访问以前运行的工作流程的工件,则需要将这些工件存储在某个位置。例如,您可以在工作流程结束时运行一个脚本,将构建工件存储在Amazon S3或Artifactory上,然后使用存储服务的API在未来的工作流程中检索这些工件。
仅为了记录。
我想在工作流程之间共享一些轻量级的上下文字符串,并创建了这个https://github.com/marcoslopes/git-notes-action。
我的具体用例是有不同的工作流程处理构建和部署。 构建将使用packer创建ami,而部署将使用创建的映像进行部署terraform。
当我写这篇文章时,我意识到我本可以将sha添加为图像本身的标记,并通过cli搜索它,哦好吧。
steps:
- uses: actions/checkout@v3
- name: Github cli Bolivia
env:
GH_TOKEN: ${{ github.token }}
run: | # gh run download RUN_ID -n ARTIFACT_NAME
gh run download 5268888888 -n downloader-artifact
看起来相关功能问题是download-artifact/issues#3,它引用了@Tobbe在他上面接受的答案中提到的dawidd6/action-download-artifact操作。