首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个连续的GitHub操作作业之间传递变量?

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

Stack Overflow用户
提问于 2019-11-07 04:32:40
回答 2查看 3.8K关注 0票数 4

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

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

但是,由于我正在构建Rust代码,我必须在不同的平台上编译它。显然,对于这一点,我在每个平台上都有一个工作,我正在尝试在那个工作中推动我的工件。

但是为了让推送起作用,我必须使用actions/create-release@v1.0.0提供的版本标识符,它在另一个作业中运行。

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

此处提供了THe完整的工作流程:https://github.com/Riduidel/rrss2imap/blob/master/.github/workflows/on_tag.yml

我把它复制到这里

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-11 20:41:48

嗯,看起来有更好的方法。

创建版本时,将发送标准的GitHub release event

因此可以创建一个使用此事件来触发工件上传的作业。希望发布事件有all required elements

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

票数 0
EN

Stack Overflow用户

发布于 2019-11-07 23:43:49

一种可能的解决方案是在创建版本后创建一个repository_dispatch事件。您可以传递一个包含构建所需变量的有效负载。

按如下方式更改您的工作流程。使用名为REPO_ACCESS_TOKENrepo作用域Personal Access Token

代码语言:javascript
复制
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
      - name: Dispatch Builds
        uses: peter-evans/repository-dispatch@v1.0.0
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          event-type: builds
          client-payload: '{"release_url": "${{ steps.create_release.outputs.upload_url }}", "ref": "${{ github.ref }}"}'

或者,使用curl调用GitHub应用编程接口,而不是操作。

代码语言:javascript
复制
      - name: Dispatch Builds
        run: |
          curl -XPOST \
            -u "peter-evans:${{ secrets.REPO_ACCESS_TOKEN }}" \
            -H "Accept: application/vnd.github.everest-preview+json" \
            -H "Content-Type: application/json" https://api.github.com/repos/${{ github.repository }}/dispatches \
            --data '{"event_type": "builds", "client_payload": {"release_url": "${{ steps.create_release.outputs.upload_url }}", "ref": "${{ github.ref }}"}}'

然后添加一个工作流,如下所示来处理您的构建。(我在这个例子中去掉了你工作流程中的大部分细节)

代码语言:javascript
复制
on:
  repository_dispatch:
    types: [builds]
jobs:
  Standard_OS_build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
        with:
          ref: ${{ github.event.client_payload.ref }}
      - name: Check release URL
        run: |
          echo "${{ github.event.client_payload.release_url }}"
  Windows_build:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@master
        with:
          ref: ${{ github.event.client_payload.ref }}
      - name: Check release URL
        run: |
          echo "${{ github.event.client_payload.release_url }}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58738070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档