分類
Jenkins

[Jenkins] 在 Windows 上安裝 Jenkins

Situation

為了建置 CI/CD,需要在本機上安裝 Jenkins

Action

詳細步驟可參考官網連結,以下紀錄在Windows上安裝Jenkins步驟
1.首先確認硬體是否符合以下規格(盡量符合Recommended)

Minimum hardware requirements:
256 MB of RAM
1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container)
Recommended hardware configuration for a small team:
4 GB+ of RAM
50 GB+ of drive space

2.若無安裝Java 請安裝 Java 8
(官網有說明Jenkins不支援太高的Java版本)

Java 8 runtime environments are supported in both 32-bit and 64-bit versions
Java 11 runtime environments are supported Java 11 Docker installation instructions are included in "Downloading and running Jenkins in Docker" See the Java 8 to Java 11 upgrade guidelines for additional upgrade instructions
Java 7 and prior are not supported
Java 9 and 10 are not supported
Java 12, 13, 14, 15, and 16 are not supported

2-1.下載並安裝JDK 8
Oracle官網下載 (需要Oracle帳號)或參考以下連結下載並安裝Java 8
Java 8 Windows x64
Java 8 Windows x86

安裝完成後開啟終端機輸入 java -version,出現以下內容就OK

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

3.下載並安裝 Jenkins
https://www.jenkins.io/download/ 下載想使用的安裝檔
我這邊是直接下載 .war 檔(Generic Java Package),這種方式不用另外安裝其他依賴套件,比較方便。但缺點是無法特別設定config
4.啟動 Jenkins
開啟終端機移動到放置 jenkins.war(Step 3.下載的檔案)的目錄,輸入以下指令啟動 Jenkins

java -jar jenkins.war

在終端機中最後應該可以看到 jenkins running message

...
2021-07-21 03:03:34.024+0000 [id=37] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2021-07-21 03:03:34.042+0000 [id=22] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running

5.設定Jenkins
開啟瀏覽器輸入 http://localhost:8080
出現 Unlock Jenkins 畫面,該畫面是第一次啟動Jenkins出現的,畫面中間有個initialAdminPassword 路徑,開啟該檔案,複製檔案中的隨機文字內容並貼到 Unlock Jenkins的下方 Administrator password,點擊 Continue。
6.安裝Jenkins套件
進入安裝套件畫面,選擇”安裝推薦的套件”,就會開始安裝套件大概需要10分鐘。
也可以不必現在安裝,之後到Jenkins後臺管理畫面也可以安裝。
7.設定 Jenkins Administrator 帳密
按照畫面輸入user name , password , email等等相關資訊
8.設定 Jenkins server URL
主要是看8080 port 是否已經使用,有的話就換另一個吧。之後也可以在Jenkins後臺管理另外設定。
9.完成!

Result

完成Action之後就可以開始使用 Jenkins。

分類
Android git 使用紀錄 Jenkins Uncategorized

合併 Jenkins 和 GitHub for Andriod Project

Jenkins 除了可以和 Local 端專案整合,也可和github一起工作。
這篇紀錄如何整合jenkins和github。
1.先在github上建立空專案。
2.在Build Server(jenkins),先 git clone github下來,並建立 android project,注意要使用 ant 成功建立專案(ant release or ant debug),
注意,不要加入local.properties 和 ant.properties,可以加入.gitignore來忽略。
完成後git push到github上
3.在jenkins建立專案並設定git path為github的路徑。
4.若有需要先在github上merge第3步驟的push commit,完成後jenkins 可以build成功。
其他詳細可參考 https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project

分類
Jenkins

git plugin error on Jenkins : Couldn't find any revision to build. Verify the repository and branch configuration for this job.

Description :
建立完 git repo 並在jenkins新增相對應的job, 執行”馬上建置”, 在jenkins console output顯示的訊息如下

...
ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.
Finished: FAILURE

該錯誤目前只出現在建立完 git repo, 但未commit的情況下, 事實上開啟Terminal, 移動到git repo, 輸入git log會出現以下訊息

fatal: bad default revision 'HEAD'

只要有git commit過後, 即可解決
 
Solution :
Step 1.
新增一個檔案, 檔案內容形式不拘 e.g. ReadMe
 
Step 2.
git add ReadMe
 
Step 3.
git commit
 

分類
Jenkins

git plugin error on Jenkins : Permission denied (publickey).

Description :
安裝 git plugin 之後, 建立專案->組態->原始碼管理 -> Git -> Repository URL 並設定以下內容

ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git

 
Error :
此 error message 出現在 Repository URL下方

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git HEAD" returned status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

 
Solution :
Step 1.
首先讓另一台主機(s2)使用ssh成功登入到jenkins主機上,並在jenkins主機的~/.ssh/authorized_keys 加入s2的id_rsa.pub
 
Step 2.
複製s2的id_rsa檔案貼到jenkins主機的家目錄任意資料夾中(e.g. /home/username/server/id_rsa_files/id_rsa )此rsa檔案將被使用在Step 3.
 
Step 3.
在jenkins主機安裝 Credentials plugin 並使用 Credentials plugin 建立一個 Credentials 內容如下
Kind : SSH Username with private key,
Scope : Global
Username : (任意)
Description :  (任意)
Private key :  From a file on Jenkins master (選擇Step 2.複製到jenkins主機上的s2 id_rsa檔(/home/username/server/id_rsa_files/id_rsa))
 
Step 4.
在原始碼管理 -> Git -> Repository URL 下方的 Credentials 內容設定為Step 3. 新增的Credentials
 
Step 5.
編輯 /etc/ssh/sshd_config 加入新的port e.g.

# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
Port 23
...

Port 23 即是新的Port,會使用在ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git 的 port
 
Step 6.
將Step 5.新增的Port number 設定到Repository URL中

ssh://username@xxx.xxx.xxx.xxx:23/absolute_path.git

完成後Error訊息就會消失
 
 
Note :
1.Permission denied的原因有很多, 首先從git repo建立者和jenkins使用者關係找起, 將2者config設定一致, 也在jenkins使用者中加入ssh public key, 無效
2.設定jenkins->設定系統-> Git plugin -> Global Config user.name Value 和 Global Config user.email Value 設定與git repo建立者相同, 無效
3.使用Credentials plugin建立jenkins主機的credential(類似Step 3. 但其中的Private key設定為jenkins本機的id_rsa)並設定在 原始碼管理 -> Git -> Repository URL 中 也是無效
4.在Repository URL的Port Number設定也有關係, 若不依照 Step 5.建立新Port, Permission denied還是無解

分類
Jenkins

使用指令和外掛來備份及還原jenkins

1.使用指令備份和還原

只需要將 JENKINS_HOME 所指的目錄內所有資料複製起來即可完成備份,
如JENKINS_HOME=/home/jenkins ,就把/home/jenkins所有資料複製起來,備份和還原時儘量先停止jenkins (/etc/init.d/jenkins stop)
 

Backup:

1.先登入 root 權限
2.建立並移動到備份用的資料夾

mkdir jenkins_backup
cd jenkins_backup

3.複製所有JENKINS_HOME 所有資料夾

cp -adr /home/jenkins/* ./ (為jenkins_backup)

 

Restore:

1.先登入 root 權限
2.移動到放置所有備份資料的資料夾中

cd jenkins_backup

3.複製備份檔到 JENKINS_HOME 所指資料夾

cp -adr ./* /home/jenkins/

 

2.使用ThinBackup備份及還原jenkins

Install :

登入jenkins -> 管理 Jenkins -> 管理外掛 -> 過濾條件輸入thinBackup -> 勾選安奘選項開始安裝 -> 頁面會提示安裝流程,完成後需要重新開啟jenkins

Setup :

登入jenkins -> 管理 Jenkins -> ThinBackup -> Settings -> Backup directory(填入備份檔放置路徑) ,還有其他選項可以調整如定時備份等等
 

Backup :

登入jenkins -> 管理 Jenkins -> ThinBackup -> Backup Now -> 在放置的路徑下就會產生備份檔
 

Restore :

登入jenkins -> 管理 Jenkins -> ThinBackup -> Restore -> 選擇備份檔案
 

分類
Jenkins

jenkins 備份及還原專案

說明:
jenkins的專案全部都放在 jobs 資料夾下,只要複製專案資料夾,就能進行備份還原動作
本地和遠端動作類似,差別在於遠端需要ssh和sftp
要注意複製專案時是否有將專案內全部資料都複製齊全
本地備份
1. 開啟終端機,取得root權限

sudo -s

2.複製想備份的專案

cp -adr /home/jenkins/jobs/專案名 目的路徑

 
本地還原
1.還原專案

cp -adr 來源路徑 /home/jekins/jobs

備份及還原儘量在 jenkins 停止的狀態下進行,經測試備份及還原的進行可以不必停止jenkins
不過還原後必須重啟jenkins,備份的專案才會顯示
 
遠端備份
1.使用ssh指令遠端登入server
2.移動到/home/jenkins/jobs目錄中
3.針對要備份的專案進行壓縮
壓縮:
tar zcvf 壓縮檔名.tar.gz 來源檔(專案名)
4.離開ssh
5.使用sftp將剛剛製作的壓縮檔get到本地端
(要注意本地端放置備份壓縮檔的目錄權限,如果目錄是需要root,則使用sftp指令前必須先切換到root權限再使用sftp)
 
遠端還原
1.先使用sftp將備份壓縮檔put到遠端
(由於sftp無法切換到root權限,所以無法直接把壓縮檔put到/home/jenkins/jobs中,先put到可以put的目錄)
2.離開sftp,使用ssh登入遠端,切換到root權限並將備份壓縮檔解壓縮到/home/jenkins/jobs中
3.重啟jenkins

分類
Jenkins

Jenkins 帳號權限設定

Jenkins 安裝完成後,預設是以匿名(anonymous)帳號登入,只要連線到該ip,無論是誰都可以設定或調整,建議安裝完成後立刻處理帳號權限控管,步驟如下

1.進入Jenkins 主頁面
2.點擊 “管理jenkins”
3.點擊 “設定全域安全性”
4.勾選 “啟用安全性”
5.點擊 “Jenkins內建使用者資料庫”
6.勾選 “予許使用者註冊”
7.點擊 “矩陣型安全性”
8.在 “要新增的使用者或群組:”輸入欄內填入想要的管理者帳號,並點擊”新增”按鈕
9.取消匿名使用者的所有權限,並加入第8步驟建立的管理者所有權限
10.關閉網頁並重啟jenkins
11.註冊使用者,使用者名稱記得輸入第8步驟建立的管理者帳號
12.成功登入,完成!!
分類
Jenkins

在 ubuntu 上安裝 jenkins

1.安裝 Jenkins
開啟終端機輸入

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo aptitude update 
sudo adduser jenkins
 
(unix密碼輸入自選 , 全名輸入jenkins , 其他使用預設(enter))
 
sudo aptitude install jenkins

 

查看安装是否成功:
開啟瀏覽器输入 http://localhost:8080 或 http://127.0.0.1:8080
使用指令啟動jenkins :
sudo /etc/init.d/jenkins start
使用指令停止
jenkins : sudo /etc/init.d/jenkins stop
此時在區網內其他電腦也可開啟瀏覽器輸入 http://遠端ip:8080 (遠端ip視內外網而定)
 
2.安裝其他套件
從 http://updates.jenkins-ci.org/download/plugins/ 選擇需要的套件
下載後通常是 .hpi 格式,把這些放到 /var/lib/jenkins/plugins ,再重新啟動Jenkins

(先移動到放置 .hpi資料夾中 使用 cp -r ./ /var/lib/jenkins/plugins)