Azure Pipelines 如何指定 IBM Java SDK 8.0 為主要的 JDK 版本 | The Will Will Web

The Will Will Web

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

Azure Pipelines 如何指定 IBM Java SDK 8.0 為主要的 JDK 版本

雖然 Azure Pipelines 提供的 Microsoft-hosted agents 大多已經內建了 Adopt OpenJDK 8.0/11.0/13.0 版本可供選擇,但是我們最近有個案子,客戶指定要用 IBM Java SDK 8.0 為主要的 JDK 版本,所以就需要額外下載與設定才能使用。本篇文章將說明完整的設定方法。

指定 JDK 版本的方法

由於 Azure Pipelines 提供的 Microsoft-hosted agents 已經內建了三個版本的 Adopt OpenJDK,你可以從 Microsoft-hosted agents 頁面得知每一個不同 Agents 的內建軟體清單:

Image Classic Editor Agent Specification YAML VM Image Label Included Software
Windows Server 2019 with Visual Studio 2019 windows-2019 windows-latest OR windows-2019 Link
Windows Server 2016 with Visual Studio 2017 vs2017-win2016 vs2017-win2016 Link
Ubuntu 20.04 ubuntu-20.04 ubuntu-latest OR ubuntu-20.04 Link
Ubuntu 18.04 ubuntu-18.04 ubuntu-18.04 Link
Ubuntu 16.04 ubuntu-16.04 ubuntu-16.04 Link
macOS X Mojave 10.14 macOS-10.14 macOS-10.14 Link
macOS X Catalina 10.15 macOS-10.15 macOS-latest OR macOS-10.15 Link

單就 Java 相關的軟體,就包含了以下 3 個不同版本的 OpenJDK,也設定好了三個不同的環境變數,讓你可以自由切換:

Version Vendor Environment Variable
8.0.302+8 (default) Adopt OpenJDK JAVA_HOME_8_X64
11.0.12+7 Adopt OpenJDK JAVA_HOME_11_X64
13.0.2+8.1 Adopt OpenJDK JAVA_HOME_13_X64

預設 Microsoft-hosted agents 也會幫你設定好 JAVA_HOME 環境變數,所以預設你的建置環境就會有 Adopt OpenJDK 8.0.302+8 為你主要的 JDK 環境!

我們都知道,更換 JDK 版本很簡單,基本上就兩個條件:

  1. 指定正確的 JAVA_HOME 環境變數
  2. 設定正確的 PATH 環境變數可預設指向正確的 Java 工具組路徑

假設我們要在 Pipeline 執行的中間設定這兩個環境變數,你可以有以下 3 種選擇:

  • 新增一個 Windows PowerShell 工作 (Windows)

    echo '##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)'
    echo '##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)'
    
  • 新增一個 Command line 工作 (cmd.exe on Windows)

    echo ##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)
    echo ##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)
    

    注意:千萬不要加上雙引號在 echo 後方的字串,否則路徑會有問題!我被這個細節雷到過!💥

  • 新增一個 Command line 工作 (Bash on Linux/macOS)

    echo '##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)'
    echo '##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)'
    

指定 IBM Java SDK 8.0 版本的方法

要在 Microsoft-hosted agents 安裝與設定沒有內建的 JDK 版本,就需要每次都下載 JDK 檔案,並設定好 JAVA_HOMEPATH 環境變數。

以下是設定的三個步驟:

  1. 下載 IBM Java SDK 80

    我將檔案上傳到與 Azure DevOps 組織相同 地區(Region) 的 Azure 儲存體帳戶 (Storage account),如此一來才能節省頻寬支出,因為 Azure Storage 的流量費用在相同地區內是完全免費的,這點非常重要!🔥

    像我的 Azure DevOps 組織就落在 East US 2 這個地區,所以我就特別到 Azure 建立一個也在 East US 2 地區的 Storage account!

    curl.exe -s https://xxxxx.blob.core.windows.net/cicd/ibm_sdk80.zip -o "$(Agent.BuildDirectory)\ibm_sdk80.zip"
    
  2. 解壓縮 IBM Java SDK 80 到 $(Agent.BuildDirectory) 目錄下

    新增 Extract files 工作,並設定以下參數:

    steps:
    - task: ExtractFiles@1
      displayName: '解壓縮 IBM Java SDK 80 到 $(Agent.BuildDirectory)'
      inputs:
        archiveFilePatterns: '$(Agent.BuildDirectory)\ibm_sdk80.zip'
        destinationFolder: '$(Agent.BuildDirectory)'
        cleanDestinationFolder: false
    

    注意:我的 ibm_sdk80.zip 壓縮檔中的第一層只有 ibm_sdk80 一個資料夾,所以解壓縮的時候可以直接輸出到 $(Agent.BuildDirectory) 目錄。

  3. 設定 JAVA_HOME 與 PATH 環境變數

    echo ##vso[task.setvariable variable=JAVA_HOME]$(Agent.BuildDirectory)\ibm_sdk80
    echo ##vso[task.setvariable variable=PATH]$(Agent.BuildDirectory)\ibm_sdk80\bin;$(PATH)
    

相關連結