The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Azure Pipelines 如何指定 Agent 的 PATH 環境變數 (Logging commands)

Azure Pipelines 有個 Logging commands 可以用來與 Agent 進行溝通,你可以在執行 Pipelines 的過程中,對 Agent 做出許多設定,可以做的事情還蠻多的,而且我之前也寫過好幾篇文章,今天我想專注在「環境變數」這件事情上,尤其是 PATH 環境變數。

設定環境變數

我們要先理解一下 Azure Pipelines 的運作架構,基本上一個 Pipeline (管線) 底下可能會有多個 Agent Jobs (代理作業) (大多只會有一個),而每個 Agent Job 會有多個 Tasks (作業),我們會在 Task 中執行一些命令或工作。每個 Pipeline 都可以啟動一次次的 Run (執行),而每次的 Run 都會保留 CI 過程的所有資訊,包含 執行記錄 (Logs) 與 產出物 (Artifact)。

當 Agent 開始執行工作時,它會建立起一個工作目錄,讓你在該目錄先取出原始碼,然後在該目錄進行 CI 或 CD 作業,我們需要設定的「環境變數」其實是每一次 Run (執行) 的時候當下的環境變數,你應該不會想要在 Run 的過程中修改掉系統的環境變數,即便你有系統管理員的權限。

我們在多個不同的 Tasks 之間要共用資料,最方便的方式就是透過「環境變數」來暫存一些狀態,當你成功寫入環境變數之後,會讓接下來的每一個 Tasks 都能讀取到這些環境變數。

以下是透過 Logging commands 寫入一個環境變數的方式,我們假設要寫入一個 npm_config_yes 的環境變數,變數值為 true

  1. Command Prompt (命令提示字元)

    echo ##vso[task.setvariable variable=npm_config_yes;]true
    
  2. PowerShell

    Write-Host "##vso[task.setvariable variable=npm_config_yes;]true"
    
  3. Bash

    #!/bin/bash
    echo "##vso[task.setvariable variable=npm_config_yes;]true"
    

你可以從上述命令清楚的看出,只要直接在 Console 輸出一個名為 Logging commands 的訊息,就可以告訴 Azure DevOps 的 Agent 設定一組變數使用。

設定 PATH 環境變數

其實在 CI 的過程中,有時候我會希望修改掉 PATH 環境變數,讓我接下來的 Tasks 可以使用較短的命令來執行程式,此時你可以用 task.prependpath 工作將一個路徑加到 PATH 環境變數的最前面,也就是優先權最高的位置!

例如你在 CI 的過程中要自訂 Node.js 的執行檔路徑,那麼你可以這樣設定 PATH 環境變數:

  1. Command Prompt (命令提示字元)

    echo ##vso[task.prependpath]$(System.DefaultWorkingDirectory)\Node\node-v16.13.0-win-x64
    
  2. PowerShell

    Write-Host "##vso[task.prependpath]$(System.DefaultWorkingDirectory)\Node\node-v16.13.0-win-x64"
    
  3. Bash

    #!/bin/bash
    echo "##vso[task.prependpath]$(System.DefaultWorkingDirectory)\Node\node-v16.13.0-win-x64"
    

下載 Node.js 的命令如下:

curl.exe -sSL "https://nodejs.org/dist/v16.13.0/node-v16.13.0-win-x64.zip" -o "node-v16.13.0-win-x64.zip"
7z x "node-v16.13.0-win-x64.zip" -o"$(System.DefaultWorkingDirectory)\Node"

相關文章

相關連結

留言評論