雖然 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 2022 with Visual Studio 2022 | windows-2022 | windows-2022 | Link |
| Windows Server 2019 with Visual Studio 2019 | windows-2019 | windows-2019 OR windows-latest | 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 11 Big Sur | macOS-10.14 | macOS-11 OR macOS-latest | Link |
| macOS X Catalina 10.15 | macOS-10.15 | macOS-10.15 | Link |
macOS X Mojave 10.14 | macOS-10.14 | macOS-10.14 | Link |
單就 Java 相關的軟體,windows-2019 就包含了以下 4 個不同版本的 OpenJDK,也設定好了三個不同的環境變數,讓你可以自由切換:
| Version | Vendor | Environment Variable |
8.0.312+7 (default) | Eclipse Temurin | JAVA_HOME_8_X64 |
11.0.13+8 | Eclipse Temurin | JAVA_HOME_11_X64 |
13.0.2+8.1 | Adopt OpenJDK | JAVA_HOME_13_X64 |
17.0.1+12 | Eclipse Temurin | JAVA_HOME_17_X64 |
預設 Microsoft-hosted agents 也會幫你設定好 JAVA_HOME 環境變數,所以預設你的建置環境就會有 Adopt OpenJDK 8.0.312+7 為你主要的 JDK 環境!
要更換 JDK 版本其實很簡單,基本上就兩個條件:
- 指定正確的
JAVA_HOME 環境變數 - 設定正確的
PATH 環境變數可預設指向正確的 Java 工具組路徑
假設我們要在 Pipeline 執行的中間設定這兩個環境變數,你可以有以下 3 種選擇:
-
新增一個 Windows PowerShell 工作 (Windows)
echo '##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_17_X64)'
echo '##vso[task.prependpath]$(JAVA_HOME_17_X64)\bin'
-
新增一個 Command line 工作 (cmd.exe on Windows)
echo ##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_17_X64)
echo ##vso[task.prependpath]$(JAVA_HOME_17_X64)\bin
注意:千萬不要加上雙引號在 echo 後方的字串,否則路徑會有問題!我被這個細節雷到過!💥
-
新增一個 Command line 工作 (Bash on Linux/macOS)
echo '##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_17_X64)'
echo '##vso[task.prependpath]$(JAVA_HOME_17_X64)\bin'
指定 IBM Java SDK 8.0 版本的方法
要在 Microsoft-hosted agents 安裝與設定沒有內建的 JDK 版本,就需要每次都下載 JDK 檔案,並設定好 JAVA_HOME 與 PATH 環境變數。
以下是設定的三個步驟:
-
下載 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.ToolsDirectory)\ibm_sdk80.zip"
-
解壓縮 IBM Java SDK 80 到 $(Agent.ToolsDirectory) 目錄下
新增 Extract files 工作,並設定以下參數:
steps:
- task: ExtractFiles@1
displayName: '解壓縮 IBM Java SDK 80 到 $(Agent.ToolsDirectory)'
inputs:
archiveFilePatterns: '$(Agent.ToolsDirectory)\ibm_sdk80.zip'
destinationFolder: '$(Agent.ToolsDirectory)'
cleanDestinationFolder: false
注意:我的 ibm_sdk80.zip 壓縮檔中的第一層只有 ibm_sdk80 一個資料夾,所以解壓縮的時候可以直接輸出到 $(Agent.ToolsDirectory) 目錄。
-
設定 JAVA_HOME 與 PATH 環境變數
echo ##vso[task.setvariable variable=JAVA_HOME]$(Agent.ToolsDirectory)\ibm_sdk80
echo ##vso[task.prependpath]$(Agent.ToolsDirectory)\ibm_sdk80\bin
相關連結