Code block

Google Code Prettify + AD Sense

2018年7月10日 星期二

Linux 版 VSTS Agent 之 JVM 環境變數設定 - (包含SuSE Linux)

 基於協同作業、集中管理、流程自動化、降低人為失誤風險等原因,公司採用 TFS 平台來管理程式原始碼,並且使用 TFS 之 Build Agent 來組建程式碼使其可發佈、執行,但 TFS Build Agent 除了 Agent 本身之軟體外,尚需要依照程式語言的需求安裝編譯所需的軟體,才可完成編譯\組建的作業。

以下會說明:
  1. Linux 版的 Build Agent 如何安裝 Java 程式
  2. Linux 上如何設定 Java 執行所需之環境變

Java基礎說明

 我們可以在 Oracle 所屬的 https://java.com/zh_TW/ 下載 Java,但在實際下載時,可能會發現 Java 相同的版號會有 JRE、JDK 兩種不同的版本,簡單來說這兩種的分別為:
  1. JRE (Java Runtime Environment) - 可讓執行 Java 程式的軟體 - JRE 之 Wiki 網頁
  2. JDK (Java Development Kit) - 提供 Java 程式語言的開發套件 - JDK 之 Wiki 網頁
由於我們 TFS Build Agent 的目的為「組建程式」,因此我們需要安裝的是 JDK

如何下載 Linux JDK

當我們前往 JDK 下載網頁 時,先找到要下載的 JDK 版號,然後選擇下載種類為「JDK」
進入下載的選擇頁面後,請先勾選「Accept License Agreement」,才可以點下方的下載連結
Linux 平台可下載的版本有很多種,請依需求選擇要下載的版本,因為64位元作業系統相當普及了,所以一般狀況下應該選擇 x64 版,附檔名選擇 .tar.gz 的那一個

額外問題:為何不選擇 rpm ?
問題說明:因為 Linux 有許多套件版本,選擇 rpm 可能會發生以下狀況:
1. 不確定這個打包的 rpm 是否符合您所使用的 Linux
2. 若需要多個 JDK 版本並存時,rpm 安裝會互相覆蓋
3. 若有多台伺服器,基於整體環境的控管,您可能會希望「所有」Linux伺服器中,「額外安裝」的軟體要集中在一個方便管理的路徑

開始佈署 JDK

本例下載的檔案是 jdk-u8171-linux-x64.tar.gz,將下載的檔案上傳到 Linux 主機自己的 Home 目錄中,而我們要將 JDK 佈署於 /opt 目錄內執行以下指令
cd /opt ## 變更目錄為/opt
tar zxvf $HOME/jdk-8u171-linux-x64.tar.gz  ## 解開打包的壓縮檔

解開檔案後,可以看到目錄 /opt 下多了一個名稱為jdk1.8.0_171的資料夾,全名為/opt/jdk1.8.0_171
佈署的部份,這樣就完成了,後面只要再做一些環境變數的設定就可以了

Java 環境變數

JAVA執行前,一般會必需要指定兩種變數:
  1. JAVA_HOME
  2. PATH
另外,有些環境變數「可能」會被用到,:
  1. JDK_HOME
  2. JRE_HOME
  3. JAVA_BINDIR
  4. JAVA_ROOT

變數說明

  • JAVA_HOME - 就是宣告 JAVA 放置的位置,就輸入以下的指令即可:
    JAVA_HOME=/opt/jdk1.8.0_171
  • PATH - 在 Linux 內則是尋找執行指令的路徑,如果沒有設定,可能會找不到 java 這個指令,要設定 PATH 請輸入以下指令:
    PATH=$PATH:$JAVA_HOME/bin
    或是
    PATH=$PATH:$JRE_HOME/bin #(TFS Agent不適用,因為會裝JDK而不會是JRE)
    補充說明:前面等號(=)後面的 $PATH 代表,新的 PATH 變數要帶入「原本的PATH變數內容」,然後我們在後面附加上 $JAVA_HOME/bin 這個路徑
    原本是:
    PATH=/usr/local/bin:/usr/bin:/usr/bin
    改成:
    PATH=/usr/local/bin:/usr/bin:/usr/bin:/opt/jdk1.8.0_171/bin
  • JDK_HOME - 由於JDK是開發套件,在某些特殊的軟體,會偵測這個變數,一般來說會設定解壓縮的路徑
    JDK_HOME=/opt/jdk1.8.0_171
    或直接帶入 JAVE_HOME 也可以
    JDK_HOME=$JAVA_HOME
  • JRE_HOME - 類似 JDK,有時某些軟體會偵測這個變數:
    如果安裝的是JDK,會是
    JRE_HOME=$JAVA_HOME/jre
    如果安裝的是JRE,則會是
    JRE_HOME=$JAVA_HOME
    (TFS Agent不適用)
  • JAVA_BINDIR - 類似 JDK,也是只有部分軟體會偵測這個變數,調用 JAVA 的 Binary 執行檔,通常會是
    JAVA_BINDIR=$JAVA_HOME/bin
    或是
    JAVA_BINDIR=$JRE_HOME/bin
  • JAVA_ROOT - 也是類似JDK,部份軟體才會使用,如果沒有特別的需求,設定為$JAVA_HOME即可
    JAVA_ROOT=$JAVA_HOME

在 Linux 設定 Java 變數

環境變數的設定,可在登入之後下指令宣告,但是每重次新登入 Linux 都要宣告一次相當的麻煩,因此會調整 Profile 的設定,使 Java 變數在登入、啟動新 shell 時都會自動建立,大部份的 Linux,登入環境設定檔是 /etc/profile,修改這個檔案即可
SuSE 團隊將所有 Profile 相關的變數設定,依種類區分為各個獨立的檔案,放置在資料夾 /etc/profile.d 下,Java 的設定請修改 /etc/profile.d/alljava.sh

※如果使用的是 SuSE Linux,建議依循 SuSE 團隊整理與規劃的方式來進行調整,以免設定散落在各處不好尋找 & 維護
  • 一般 Linux - 請修改/etc/profile這個檔案,將以下指令附加到最後即可
    # JAVA_HOME請務必先宣告,以免後面的變數變成空值
    export JAVA_HOME=/opt/jdk1.8.0_171
    export JAVA_BINDIR=$JAVA_HOME/bin
    export JAVA_ROOT=$JAVA_HOME
    export JDK_HOME=$JAVA_HOME
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$PATH:$JAVA_HOME/bin
    
  • SuSE Linux - 請修改/etc/profile.d/alljava.sh
    原始內容:
    for JDIR in /usr/lib64/jvm /usr/lib/jvm /usr/java/latest /usr/java; do
        #....(略)
        export JAVA_HOME=$JPATH
        unset JDK_HOME
        unset SDK_HOME
    done
    
修改為:
## JDIR in 的後面插入路徑: /opt/jdk1.8.0_171 
for JDIR in /opt/jdk1.8.0_171 /usr/lib64/jvm /usr/lib/jvm /usr/java/latest /usr/java; do
  #....(略)
  export JAVA_HOME=$JPATH
  export PATH=$PATH:$JAVA_HOME/bin # ← 插入這行
  unset JDK_HOME
  unset SDK_HOME
done

驗證

修改完成,請重新登入,登入後請使用以下指令確認是否有生效 # 確認 Java 環境變數
echo $JAVA_HOME
# 確認 PATH 路徑有包含 Java 的路徑
echo $PATH

沒有留言:

張貼留言