簡體   English   中英

參數化 GitHub 操作的“runs-on”值

[英]Parameterize `runs-on` value for GitHub action

我有這個 GitHub 工作流程,我需要對運行的跑步者進行參數化。 所以在我嘗試的 YAML 文件中:

# ... 
jobs: 
  process:
    name: Process
    runs-on: ${{ secrets.GH_RUNNER_TAG }}
# ...

但是,我收到此錯誤:

The workflow is not valid. .github/workflows/action.yml (Line: 12, Col: 14): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.GH_RUNNER_TAG

這個元素不能使用秘密注入嗎? 還有其他選擇嗎? 該值不需要保密,但我需要將它放在一個地方,而不是每次運行器標簽更改時都編輯數百個 YAML 文件......


EDIT1:正如GuiFalourd建議的那樣,我已經嘗試在工作流級別創建一個環境變量來保存秘密:

env:
  RUNNER_LABEL: ${{ secrets.GH_RUNNER_TAG }}

jobs:
  analyze:
    name: Analyze
    runs-on: $RUNNER_LABEL

它不起作用。 動作卡住了。 我嘗試使用:

$RUNNER_LABEL -> 卡住了 "$RUNNER_LABEL" -> 也卡住了 ${{ env.RUNNER_LABEL }} -> 動作沒有開始,輸出錯誤:

The workflow is not valid. .github/workflows/action.yml (Line: 14, Col: 14): Unrecognized named-value: 'env'. Located at position 1 within expression: env.RUNNER_LABEL

此外,我檢查了 env var 是否已正確分配,方法是為runs-on放置一個有效的硬編碼值並將第一步設置為:

steps:
  - name: Test
    run: echo "$RUNNER_LABEL"

這會產生“***”——證明 GitHub 已自動輸出並編輯了一個秘密。

這可以使用可重用工作流來實現,方法是配置“被調用”工作流以接受來自調用者的輸入。

我們可以將其命名為“進程”的主管道將使用共享代碼庫/管道,我們稱之為“通用”,它可以接受輸入,其中一個輸入可以是runs-on值。

例如

# common.yml
name: parameterized job
on:
  workflow_call:
    inputs:
      runner:
        required: true
        type: string
jobs:
  common:
    name: Common
    runs-on: ${{ inputs.runner }}
    steps:
      - run: echo "Hello World"
# process.yml
name: process
on:
  push:

jobs:
  process:
    uses: username/repo/.github/workflows/common.yml@branch
    with:
      runner: machine_with_specific_label # using ${{ env.MY_RUNNER_LABEL }} is possible as well


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM