雖然 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
相關連結