如何在两个连续的 GitHub Actions 作业之间传递变量?

Rid*_*del 6 continuous-integration release github github-actions

我正在尝试编写一个工作流程,让标签创建工作流程填充我的 GitHub 项目版本。

我已经知道如何创建版本(使用actions/create-release@v1.0.0)以及如何在版本中推送工件(使用actions/upload-release-asset)。

但是,由于我正在构建 Rust 代码,因此我必须在不同的平台上编译它。显然,为此,我在每个平台上都有一份工作,并且我正在努力将我的工件推向该工作。

但为了让推送工作,我必须使用 给出的发布标识符actions/create-release@v1.0.0,它在另一个作业中运行。

因此我的问题是:如何将发布 URL 从发布创建作业传递到将推送工件的作业?

完整的工作流程可以在这里找到:https://github.com/Riduidel/rrss2imap/blob/master/.github/workflows/on_tag.yml

我把它复制在这里

name: Push release artifacts on tag

on:
  push:
    tags:
      - '[0-9]+.[0-9]+.[0-9]+'

jobs:
  Make_GitHub_Release:
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1.0.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: true
          prerelease: false
  Standard_OS_build:
    name: Build on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
#        os: [ubuntu-latest, macOS-latest]
    steps:
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - uses: actions/checkout@master
      # see https://github.com/marketplace/actions/rust-cargo
      - uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --all-features
      - uses: olegtarasov/get-tag@v1
      - name: Upload matrix release asset
        id: upload-release-asset 
        uses: actions/upload-release-asset@v1.0.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
# Doesn't work, since I can't access the first job from this one
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_name: rrss2imap_${{ matrix.os }}
          asset_path: target/release/rrss2imap
          asset_content_type: application/octet-stream
    needs: Make_GitHub_Release
  Windows_build:
    name: Build on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [windows-latest]
    steps:
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - uses: actions/checkout@master
      # see https://github.com/marketplace/actions/rust-cargo
      - uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --all-features
      - uses: olegtarasov/get-tag@v1
      - name: Upload Windows asset
        id: upload-release-asset 
        uses: actions/upload-release-asset@v1.0.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
# Doesn't work, since I can't access the first job from this one
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_name: rrss2imap_${{ matrix.os }}
          asset_path: target/release/rrss2imap.exe
          asset_content_type: application/vnd.microsoft.portable-executable
    needs: Make_GitHub_Release
  Cross_build_for_Raspbian:
    name: Build for Raspbian
    runs-on: ubuntu-latest
    steps:
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: armv7-unknown-linux-gnueabihf
          override: true
      - uses: actions/checkout@master
      # see https://github.com/marketplace/actions/rust-cargo
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --all-features
      - uses: olegtarasov/get-tag@v1
      - name: Upload matrix release asset
        id: upload-release-asset 
        uses: actions/upload-release-asset@v1.0.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
# Doesn't work, since I can't access the first job from this one
          upload_url: ${{ steps.create_release.outputs.upload_url }} 
          asset_name: rrss2imap_${{ matrix.os }}
          asset_path: target/release/rrss2imap
          asset_content_type: application/octet-stream
    needs: Make_GitHub_Release
Run Code Online (Sandbox Code Playgroud)

Rid*_*del 0

嗯,看来还有更好的办法。

创建发布时,会发送标准 GitHub发布事件。

因此可以创建一个使用此事件来触发工件上传的作业。希望发布活动具备所有必需的元素

但是,请注意,您必须使用具有repo权限集的 GitHub 令牌!