View a markdown version of this page

在佇列環境中設定環境變數 - 截止日期雲端

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在佇列環境中設定環境變數

許多應用程式和架構使用環境變數來控制功能設定、記錄層級和顯示組態。您可以使用開放任務描述 (OpenJD) 環境來設定其範圍內每個任務命令繼承的環境變數。

環境變數範圍

AWS 截止日期 Cloud 會從您連接至佇列的佇列環境套用環境變數。在任務範本中,您也可以使用 OpenJD 環境在任務和步驟層級定義環境變數。在較窄範圍定義的變數,會覆寫具有較廣泛範圍相同名稱的變數。

  • 佇列環境 – 您附加至截止日期雲端中佇列的範本。變數會套用至提交至佇列的所有任務。您可以使用固定值的variables映射來設定變數,或使用動態值的指令碼。

  • 任務環境 – 在任務範本jobEnvironments的 下定義。變數適用於任務中的所有步驟和任務。任務層級變數會以相同名稱覆寫佇列層級變數。

  • 步驟環境 – 在任務範本stepEnvironments的 下定義。變數僅適用於該步驟中的任務。步驟層級變數會以相同名稱覆寫任務層級或佇列層級變數。

在佇列環境中設定變數

您可以使用固定值的variables映射,或在動態值scriptonEnter 動作中使用 ,在佇列環境中設定環境變數。

下列佇列環境範本使用variables映射將QT_QPA_PLATFORM變數設定為 offscreen,這可讓使用 Qt 架構的應用程式在沒有互動式顯示的工作者主機上執行。

specificationVersion: 'environment-2023-09' environment: name: QtOffscreen variables: QT_QPA_PLATFORM: offscreen

對於動態值,例如修改PATH或啟用虛擬環境,請使用以 openjd_env: VAR=valuestdout 格式列印行的指令碼。字openjd_env:首為必要。使用 echoexport或其他沒有字首的 Shell 機制,不會將變數傳播至任務。

下列佇列環境範本會使用指令碼設定QT_QPA_PLATFORM變數。

specificationVersion: 'environment-2023-09' environment: name: QtOffscreen script: actions: onEnter: command: bash args: - "{{Env.File.Enter}}" embeddedFiles: - name: Enter type: TEXT data: | #!/bin/env bash set -euo pipefail echo "openjd_env: QT_QPA_PLATFORM=offscreen"

若要將佇列環境連接至佇列,請使用截止日期雲端主控台或 AWS CLI。如需詳細資訊,請參閱《 AWS 截止日期雲端使用者指南》中的建立佇列環境。下列 AWS CLI 命令會從範本檔案建立佇列環境。

aws deadline create-queue-environment \ --farm-id FARM_ID \ --queue-id QUEUE_ID \ --priority 1 \ --template-type YAML \ --template file://my-queue-env.yaml

如需建立和啟用 conda 虛擬環境等更複雜的範例,請參閱 GitHub 上的截止日期雲端佇列環境範例

在任務範本中設定變數

在任務範本中,將variables映射新增至 jobEnvironmentsstepEnvironments項目。每個項目都是索引鍵/值對,其中索引鍵是變數名稱,而值是變數值。

下列任務範本會將QT_QPA_PLATFORM環境變數設定為 offscreen,允許使用 Qt 架構的應用程式在沒有互動式顯示的工作者主機上執行。

specificationVersion: 'jobtemplate-2023-09' name: MyJob jobEnvironments: - name: JobEnv variables: QT_QPA_PLATFORM: offscreen

您可以在單一環境定義中設定多個變數。

jobEnvironments: - name: JobEnv variables: JOB_VERBOSITY: MEDIUM JOB_PROJECT_ID: my-project-id JOB_ENDPOINT_URL: https://my-host-name/my/path QT_QPA_PLATFORM: offscreen

您可以使用 {{Param.ParameterName}} 語法,在變數值中參考任務參數。

jobEnvironments: - name: JobEnv variables: JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}"

若要覆寫特定步驟的任務層級變數,請使用相同的變數名稱定義stepEnvironments項目。下列範例JOB_PROJECT_ID會在任務層級以值 定義 project-12,然後使用 覆寫步驟層級的值step-project-12。步驟中的任務使用步驟層級值。

specificationVersion: 'jobtemplate-2023-09' name: MyJob jobEnvironments: - name: JobEnv variables: JOB_PROJECT_ID: project-12 steps: - name: MyStep stepEnvironments: - name: StepEnv variables: JOB_PROJECT_ID: step-project-12

試用:執行環境變數範例

Deadline Cloud 範例儲存庫包含任務套件,示範設定和檢視環境變數。範例任務範本會在任務和步驟層級定義變數,然後執行列印合併結果的任務。使用下列程序執行範例並檢查結果。

先決條件

  1. 如果您沒有具有佇列和相關聯 Linux 機群的截止日期雲端陣列,請遵循截止日期雲端主控台中的引導式加入體驗,以使用預設設定建立。

  2. 如果您的工作站上沒有截止日期雲端 CLI AWS 和截止日期雲端監視器,請遵循設定截止日期雲端提交者中的步驟。

  3. 使用 git複製截止日期雲端範例 GitHub 儲存庫

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git cd deadline-cloud-samples/job_bundles

執行範例

  1. 使用截止日期雲端 CLI 提交job_env_vars範例。

    deadline bundle submit job_env_vars
  2. 在截止日期雲端監視器中,選取新任務以監控其進度。與佇列相關聯的Linux機群有可用的工作者後,任務會在幾秒鐘內完成。選取任務,然後在任務面板的右上角選單中選擇檢視日誌

比較工作階段動作及其定義

日誌檢視會顯示三個工作階段動作。在文字編輯器中開啟檔案 job_env_vars/template.yaml,將每個動作與其在任務範本中的定義進行比較。

  1. 選取啟動 JobEnv 工作階段動作。日誌輸出會顯示正在設定的任務層級環境變數。

    Setting: JOB_VERBOSITY=MEDIUM Setting: JOB_EXAMPLE_PARAM=An example parameter value Setting: JOB_PROJECT_ID=project-12 Setting: JOB_ENDPOINT_URL=https://internal-host-name/some/path Setting: QT_QPA_PLATFORM=offscreen

    來自任務範本的下列行定義了此環境。

    jobEnvironments: - name: JobEnv variables: JOB_VERBOSITY: MEDIUM JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}" JOB_PROJECT_ID: project-12 JOB_ENDPOINT_URL: https://internal-host-name/some/path QT_QPA_PLATFORM: offscreen
  2. 選取啟動 StepEnv 工作階段動作。日誌輸出會顯示步驟層級變數,包括覆寫的 JOB_PROJECT_ID

    Setting: STEP_VERBOSITY=HIGH Setting: JOB_PROJECT_ID=step-project-12

    來自任務範本的下列行定義了此環境。

    stepEnvironments: - name: StepEnv variables: STEP_VERBOSITY: HIGH JOB_PROJECT_ID: step-project-12
  3. 選取任務執行工作階段動作。日誌輸出會顯示任務可用的合併環境變數。請注意, JOB_PROJECT_ID使用步驟層級值 step-project-12

    Environment variables starting with JOB_*: JOB_ENDPOINT_URL=https://internal-host-name/some/path JOB_EXAMPLE_PARAM='An example parameter value' JOB_PROJECT_ID=step-project-12 JOB_VERBOSITY=MEDIUM Environment variables starting with STEP_*: STEP_VERBOSITY=HIGH