Jenkins從Ubuntu遷移至AlmaLinux問題及相關解決記錄

2023-11-27 21:01:04

相關背景

之前在Ubuntu平臺上搭建了Jenkins(在Ubuntu機器上使用war包安裝Jenkins),現在由於一些需求,需要將系統遷移到AlmaLinux平臺。由於AlmaLinux屬於CentOS系列,與Ubuntu所屬的Debian系列不同,在此記錄一下遷移中遇到的問題。

問題1:賬號沒有sudo許可權

現象:根據Linux機器自建賬號並賦予sudo許可權,同時修改遠端埠建立CentOS的賬號並加入wheel組後,發現新賬號無法sudo

解決:/etc/sudoers檔案中,wheel組的sudo許可權被預設註釋,需取消註釋使其生效

檔案預設為唯讀,可通過chmod u+w /etc/sudoers增加寫許可權,編輯完成後通過chmod u-w /etc/sudoers復原寫許可權,也可以編輯後使用:wq!來強制儲存

%wheel  ALL=(ALL)       ALL

或者可以選擇將使用者加入sudoers組,不過使用者在sudo時會不需要輸入密碼

gpasswd -a <username> sudoers

問題2:ssh無法通過密碼登入

現象:/etc/ssh/sshd_config中PasswordAuthentication設為yes,但ssh遠端時,依舊提示公鑰驗證失敗,只能通過在authorized_keys中新增公鑰來登入

解決:sshd_config中include了sshd_config.d資料夾中的設定,該設定優先順序高於sshd_config檔案(sshd_config.d資料夾中同名設定,檔名靠前的覆蓋靠後的),其中將PasswordAuthentication設為了no,修改對應設定後可以通過密碼遠端

問題3:中文顯示亂碼,且執行yum命令時提示「Failed to set locale, defaulting to C.UTF-8」

現象:拷貝到系統中的檔案中,中文顯示亂碼,本地執行yum命令,第一行會提示「Failed to set locale, defaulting to C.UTF-8」

解決:調整系統語言環境

首先切換至root賬號,並安裝語言套件

yum install glibc-langpack-zh
yum install glibc-langpack-en

然後設定語言環境

echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
source /etc/profile

之後再執行yum命令就不會有該提示了,中文也能正常顯示

問題4:啟動jenkins提示許可權不夠

現象:根據在Ubuntu機器上使用war包安裝Jenkins新增jenkins.sh後,執行./jenkins.sh start提示許可權不夠

解決:檔案沒有執行許可權,先執行一次chmod +x jenkins.sh後,即可執行

問題5:maven執行時,未使用系統指定的jdk

現象:系統執行java -versionjavac -version返回的是jdk 8,但執行mvn -v返回使用的是jdk 11

解決:通過檢視/usr/bin/mvn的內容可以發現,當系統環境變數未指定JAVA_HOME時,會使用/etc/java/maven.conf中的設定,而yum安裝maven時,會預設附帶安裝jdk 11,並在其中將設定指向jdk 11,註釋掉該設定後,會使用系統預設jdk

問題6:jenkins無法通過ssh私鑰連線node機器

現象:之前未解決問題2時,無法通過密碼連線節點機,因此改用金鑰形式,在節點機authorized_keys新增公鑰,jenkins新增私鑰憑據,但是連線節點機失敗

解決:舊版本jenkins(我的是2.356)不支援較新的ssh金鑰,之前是通過ssh-keygen -t rsa -C "almallinux jenkins"來生成金鑰,現改用舊版本的金鑰生成方式

ssh-keygen -m PEM -t rsa -C "almalinux jenkins"

問題7:Jenkins Start Job(Jenkins中HTML報告無法正常顯示問題解決)執行失敗

現象:執行job時,報錯「org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use」

解決:在Manage Jenkins → In-process Script Approval中審批通過該指令碼

問題8:Jenkins控制檯輸出中文顯示亂碼,且程式碼中中文無法正常展示,中文名任務無法在節點機建立目錄

現象:Jenkins控制檯輸出無法正常顯示中文,指令碼中有中文無法執行,傳送郵件中文亂碼,執行中文名稱任務會直接失敗

解決:修改環境變數和啟動設定

  1. 節點機設定中,JVM選項設定-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8
  2. 啟動Jenkins的指令碼中,增加JVM引數-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8(原文章中的指令碼已修改)
  3. Jenkins系統設定的全域性屬性中,增加環境變數,鍵為JAVA_TOOL_OPTIONS,值為-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8
  4. 設定系統環境變數
    echo "export JAVA_TOOL_OPTIONS=\"-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8\"" >> /etc/profile
    source /etc/profile