Jenkins的安裝與部署
前言
當我們在實施一個項目時,從新代碼中獲得反饋的速度越快,問題越早得到解決,獲得反饋的一種常見方法是在新代碼之后運行測試,但這就導致了當代碼正在編譯并且正在運行測試時,開發人員無法在測試完成之前繼續工作,從而使生產效率大大降低。Jenkins通過提供持續集成功能解決了問題。合并新代碼后。Jenkins可以自動進行構建,運行測試和部署應用程序。這篇文章會向大家介紹jenkins的安裝方式和使用方法。
單元一 Jenkins安裝
學習目標
本單元主要完成學習目標;
(1)學會安裝jdk1.8
(2)學會安裝jenkins
(3)了解jenkins的初始化過程
任務1.1 安裝jdk 1.8
任務描述
安裝jdk1.8并為其配置yum源。
知識學習
Jenkins是基于java8編寫的軟件,所以在安裝之前需要在主機上安裝Java8的運行環境,及安裝jdk?1.8
務實施
[root@localhost ~]# wget https://download.oracle.com/java/17/archive/jdk-17.0.6_linux-x64_bin.rpm [root@localhost ~]# yum install -y jdk-17.0.6_linux-x64_bin.rpm?? #配置yum源 [root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo?? #安裝依賴 [root@localhost ~]# yum install fontconfig java-17-openjdk #探索密鑰 [root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key |
任務1.2 安裝jenkins
任務描述
安裝并成功登錄jenkins
知識學習
jenkins是什么?
Jenkins是一個獨立的開源軟件項目,是基于java開發的一種可擴展的持續集成(CI)工具,用于監控持續重復的工作,自動的構建和測試軟件項目,旨在提供一個開發易用的軟件平臺,使軟件的持續集成變成可能。
持續集成(CI)是什么?
持續集成(CI)是在源代碼變更后自動檢測、拉取、構建和(在大多數情況下)進行單元測試的過程。
任務實施
[root@localhost ~]# yum -y install epel-release [root@localhost ~]# yum -y install daemonize [root@localhost ~]# yum install -y jenkins #啟動服務 [root@localhost ~]# systemctl start jenkins #關閉防火墻 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 #查看密碼 [root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword f1a21e8118d342fab2515af0999368a2 |
?任務1.3自定義jenkins
任務描述
本任務主要實現以下兩個內容
(1)安裝基礎插件
(2)創建第一個管理員用戶
任務實施
1.安裝插件
登錄后,會出現如下界面,這里涉及到jenkins的插件安裝,建議選擇“安裝推薦的插件”,
點擊“安裝推薦的插件”后,今日“新手入門”頁面,等待全部插件安裝成功即可。
2.創建第一個管理員用戶
插件安裝完成后,會出現“創建第一個管理員用戶”頁面,填寫正確信息后,點擊“保存并完成”,這樣第一個管理員用戶就創建完畢了,如下圖:
?
單元二jenkins相關配置及代碼發布
學習目標
詳細了解jenkins各配置及插件的作用,學會發布代碼
任務2.1jenkins 發布php代碼
任務描述
(1)了解如何安裝插件。
(2)了解如何配置Publish Over SSH、添加公鑰、增加SSH Server
(3)了解構建一個新的任務的流程
任務實施
1.安裝插件
先進入“系統管理”,在進入“管理插件”,在“已安裝”中檢查是否有“Git plugin”和“Publish Over SSH” 兩個插件,如果沒有則需要安裝,到“可選插件”中搜索并安裝。
插件完成后,點擊“返回首頁”回到服務器中重啟jenkins后。登錄。
[root@localhost ~]# systemctl restart jenkins??#重啟 |
2.配置Publish Over SSH?
首先需要在服務器上./.目錄下生成一對密鑰,命令如下:
[root@localhost ~]# cd ~/.ssh [root@localhost .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:9kEjor318PCZg3Tj1bJDAAjlNfa2pc6PROcFZSGSe6I root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | ???.o..= ... +. | | ????..o +.. + ??| | ?????o . *.o ???| | ????o . +o*.o ??| | ???. . S.Bo= o ?| | ??????=E# X + ??| | ?????. . & + ???| | ????????. + . ??| | ?????????. . ???| +----[SHA256]-----+ |
檢查是否生成成功。命令如下:
[root@localhost .ssh]# ls -al 總用量 8 drwxr-xr-x. 2 root root ??38 12月 16 15:45 . dr-xr-x---. 4 root root ?195 12月 16 15:43 .. -rw-------. 1 root root 1679 12月 16 15:45 id_rsa -rw-r--r--. 1 root root ?408 12月 16 15:45 id_rsa.pub |
?密鑰生成成功后,登錄Jenkins。點擊“系統管理”然后點擊“系統設置”,下拉找到“Publish Over SSH”將剛才生成的服務器的私鑰填入“Publish over SSH”中的“key”,如下圖:
?
如果提示.ssh目錄不存在,則創建~/.ssh目錄,并把目錄權限設置為700
[root@localhost ~]# mkdir ~/.ssh [root@localhost ~]# chmod 700 ?~/.ssh |
3.增加SSH Server
?Publish over SSH”配置完成后,為了實現代碼的成功發布,我們需要先查看并復制服務器的公鑰,命令如下:
?然后將復制的服務器公鑰,添加到需要添加“SSH Servers”的遠程機器的.ssh/authorized_keys目錄下,若要增加服務器的“SSH Servers”,則需要將服務器的公鑰添加到服務器的.ssh/authorized_keys目錄下。命令如下:
[root@client ~]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDlOvCstNk3LLiFGQ2InNsWQgHx15nWjgt2UqKzd3JNG2jHvKgeoO6H6iMg4DKjI0fzpBxrfRaR4gJI2jf04mKfRUhhNn9yCm5Bpbx00pA2m0iuxDMbZSd3MBso7gNWnGqpTyZtCe7q9p1Ml8iJYItleDDJOlFq6yU3W5yTliOBtOKlcBahQ1alpzW5QlATTluHv9TaE/yrvW3M3D+WljIRD8OtVwT+UeqpgNQPNGa1yZWSnSsLROysieNUVFKCTqsQ66Px7UGy3GRRNjw3FoZPr7saKx8WiYU6vphdYeJOAmuGh8//8GFjCiTP/wR10RUmZYFkmVCAuBQVm7/76qqx root@localhost.localdomain
??????
在服務器上嘗試登錄遠程機器,如下圖所示:
嘗試登錄成功后,登錄jenkins進入“Manage Jenkins”,點擊“Configure System”,下滑找到“SSH Server”,填寫所需要連接機器的各項設置,然后點擊“Test Configuration”,顯示“success”,即成功。如下圖所示:
4.構建新的任務
點擊新建ltem,如下圖:
輸入任務名稱,并選擇構建軟件項目的風格,應實驗要求這里選擇自由風格,如下圖:
填寫“描述”如下圖:
配置“源碼管理”,選擇管理源碼的方式(這里選擇git),將代碼倉庫的地址填入“Repositories
URL”中,若代碼倉庫是私有倉庫,還需要點擊“添加”來添加憑證,其他保持默認即可,如下圖:
配置“構建觸發器”“構建環境”,應實驗要求此處保持默認即可,如下圖:
配置“構建”,此處用到了我們之前安裝的“publish over ssh”插件,首先增加名為“Send files or exeute commands over SSH”的構建步驟,如下圖
然后在“Name”下選擇機器名稱(此處SSH Server個數由第3步中添加的數量決定);“Source files”表示要發布那些代碼,在其下填寫“**/**”(表示全部);
“Remote directory”表示把代碼發送到遠程機器的位置,填寫“/tmp/Jenkins_test”(此處可自定義);“Exec command”下填寫想要執行的命令,此處自定義可以為空,如下圖:
點擊“高級”,出現如下頁面,其中“Pattern separator” 設置模式分隔符,“Exec timeout(ms)”?設置超時時間,此處保持默認即可,如下圖:
通常情況下我們需要添加多個機器來進行任務,點擊左下角“Add Server”來添加多個機器,如下圖:
完成以上設置后,應用保存即可
5.將代碼發布到對方機器
首先進入任務,然后點擊“立即構建”,查看“控制臺輸出”,最后登錄各機器查看代碼發布是否成功,如下圖:
任務2.2 jenkins 郵件配置
任務描述
配置“郵件通知”,對郵件進行配置,這樣當項目構建失敗時,我們能第一時間收到通知。
項目實施
首先進入“Manage Jenkins”,然后進入“Configure System”,填寫“Jenkins location”, 設置系統管理員郵件地址,這里的郵件地址需要和后續要設置的發郵件地址一致,如下圖:
找到“郵件通知”,“SMTP服務器”中填寫“smtp.163.com”,接著勾選“使用SMTP認證”,填寫所使用郵箱的用戶名及密碼,“SMTP端口”使用25端口,接著勾選“通過發送測試郵件測試配置”,向其中填寫用于發送測試郵件的郵箱地址后,點擊“Test configuration”進行測試,發送成功后,保存。如下圖:
?完成以上郵件配置后,我們還需要進入已經構建過的job里去配置接收郵件的地址。在已經構建過的項目test1中,點擊“配置”,然后在“增加構建后操作步驟”中,選擇“E-mail Notification”,最后在“Recipients”中填寫郵箱地址并勾選“每次不穩定的構建都發送郵件通知”,保存,如下圖:
最后在“Recipients”中填寫郵箱地址并勾選“每次不穩定的構建都發送郵件通知”,應用保存,如下圖:
任務2.3 插件 email-ext
任務描述
安裝并配置插件“Email Extension Plugin”
任務實施
1.安裝插件
進入“Manage Jenkins”,然后進入 “Manage Plugins”,找到并安裝插件“Email Extension Plugin”,插件安裝成功后,重啟jenkins。
2.配置Extended E-mail Notification
我們要使用 Extended E-mail Notification(email-ext) 去代替 “郵件通知”,所以我們需要先把“郵件通知”里設置的內容刪掉,如下圖:
刪除郵件通知的配置后,配置Extended E-mail Notification,“SMTP server”中填入“smtp.qq.com”;“SMTP Port”中填入端口號為“465”;“SMTP Username”和“SMTP Password”中分別填入郵箱用戶名與密碼。如下圖:
然后下滑找到”Default Tiggers”,勾選”Always”,其他保持默認,保存。如下圖:
3.配置對應任務
進入任務2.1所創建的項目test1,下拉找到“構建后操作”,然后點擊“增加構建后操作步驟”,選擇“Editable ?Email Notification”,其中Project Recipient List為接收郵件的收件人,可以在默認內容后面增加額外的收件人郵箱,用英文逗號分隔。如下圖:
如下圖,點擊右下角的“Advanced settings”,找到“Triggers”(觸發器,設置在什么情況下發送郵件),然后點擊下方的“Add Trigger”,增加發郵件的條件,保存。如下圖:
4.發送郵件測試
首先點擊“立即構建”,然后查看“控制器輸出”,如下圖所示,可以看到發郵件的動作,最后收到郵件即為成功。
任務2.4jenkins破解管理員密碼
任務描述
(1)學會在服務端破解管理員密碼
(2)可以手動設置隨機字符串
任務實施
1.破解管理員密碼
[root@localhost ~]# cd /var/lib/jenkins/users/ [root@localhost users]# ls -la 總用量 12 drwxr-xr-x. ?3 jenkins jenkins ??58 12月 16 14:39 . drwxr-xr-x. 16 jenkins jenkins 4096 12月 17 19:32 .. -rw-r--r--. ?1 jenkins jenkins ?304 12月 16 14:39 users.xml drwx------. ?2 jenkins jenkins ??24 12月 16 15:50 yansong_4245125874000227710 [root@localhost users]# cd yansong_4245125874000227710/ [root@localhost yansong_4245125874000227710]# vi config.xml [root@localhost yansong_4245125874000227710]# systemctl restart jenkins [root@localhost yansong_4245125874000227710]# 新密碼為000000 |
2.手動設置字符串
若不想使用上述的密碼,我們也可以自己定義一個隨機字符串,進入jenkins界面,點擊右上角admin,點擊設置,下拉找到“密碼”,自己定義一個隨機字符串,將自己定義的隨機字符串保存下來,位置自由,若以后忘記了密碼,可在?/var/lib/jenkins/users/admin?文件中,將字符串修改成自己定義的字符串,這樣密碼就修改成功了。
任務2.5jenkins 部署java項目
任務描述
本任務是完整的創建一個java項目
任務實施
1.準備工作
自己申請一個私有git倉庫,生成密鑰對,將公鑰添加到git服務端
2.連接代碼倉庫
[root@localhost ~]# cd /home [root@localhost home]# git config --global user.name "門同學" [root@localhost home]# git config --global user.email "445517363@qq.com" [root@localhost home]# mkdir test2 [root@localhost home]# cd test2 [root@localhost test2]# git init 初始化空的 Git 版本庫于 /home/test2/.git/ [root@localhost test2]# touch README.md [root@localhost test2]# git add README.md [root@localhost test2]# git commit -m "first commit" [master(根提交) 14bd0b7] first commit ?1 file changed, 0 insertions(+), 0 deletions(-) ?create mode 100644 README.md [root@localhost test2]# git remote add origin menyansong/test2 [root@localhost test2]# git push -u origin master Username for 'https://gitee.com': menyansong Password for 'https://menyansong@gitee.com': Counting objects: 3, done. Writing objects: 100% (3/3), 216 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Powered by GITEE.COM [1.1.5] remote: Set trace flag a4410b94 To https://gitee.com/menyansong/test2.git ?* [new branch] ?????master -> master 分支 master 設置為跟蹤來自 origin 的遠程分支 master。 |
?
3.下載zrlog
為了讓我們的實驗更加接近生產環境,我們需要一段java的源代碼,所以此處我們下載由java編寫的博客——zrlog
[root@localhost home]# wget https://codeload.github.com/94fzb/zrlog/zip/master [root@localhost home]# unzip master [root@localhost home]# mv zrlog-master/* test2/ |
4.提交代碼
[root@localhost home]# cd test2/ [root@localhost test2]# git add .?????#添加所有更改 [root@localhost test2]# git commit -m "add zrlog"????#提交更改 [root@localhost test2]# git push??????????????????#推送更改到遠程倉庫 |
?若我們可以在代碼中看到我們剛才提交的文件,說明提交成功。如下圖:
5.安裝jdk(在遠程機器上)
(1)下載
下載jdk-8u221-linux-x64.tar.gz ?并存放至/usr/local下 |
(2) 解壓
[root@localhost ~]# cd /usr/local/ [root@localhost local]# mkdir java [root@localhost local]# mv jdk-8u271-linux-x64.tar.gz ?/usr/local/java/ [root@localhost local]# cd java [root@localhost java]# tar -zxvf jdk-8u271-linux-x64.tar.gz |
(3)配置java的環境變量
[root@localhost java]# vi /etc/profile export JAVA_HOME=/usr/local/java/jdk1.8.0_271 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar [root@localhost java]# source /etc/profile????????#重啟配置生效 |
?(4)驗證
[root@localhost java]# java -version java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode) |
6.安裝tomcat(在遠程機器上)
(1)作用
tomcat是用來運行zrlog的容器
(2)下載
下載apache-tomcat-9.0.0.54.tar.gz ?#并存放至/usr/local下 |
(3)解壓
[root@client ~]# cd /usr/local/ [root@client local]# tar -zxf apache-tomcat-9.0.94.tar.gz |
(4)配置
[root@client local]# mkdir tomcat [root@client local]# mv /usr/local/apache-tomcat-9.0.94 /usr/local/tomcat [root@client local]# cd tomcat/ [root@client tomcat]# vi /usr/local/tomcat/apache-tomcat-9.0.94/conf/tomcat-users.xml #配置管理員用戶 --> <role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user name="admin" password="jenkins.com" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> <tomcat-users> [root@client apache-tomcat-9.0.94]# vi webapps/manager/META-INF/context.xml 找到 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> 向其中加入我們要使用的網段,修改如下: allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.213.*" /> 配置完成后啟動: [root@client bin]# ./startup.sh?????#開啟Tomcat |
傳一個jdk的包
解壓完成后移動到這個目錄下
[root@client tomcat]# mv jdk1.8.0_271 /usr/local/tomcat/apache-tomcat-9.0.94/ [root@client apache-tomcat-9.0.94]# cd /usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/ [root@client jdk1.8.0_271]# vi /etc/profile #在最后添加這兩行 export JAVA_HOME=/usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/??#注意路徑 export PATH=$JAVA_HOME/bin:$PATH [root@client jdk1.8.0_271]# source /etc/profile???#重啟配置文件 [root@client jdk1.8.0_271]# java -version java version "1.8.0_271" [root@client jdk1.8.0_271]# cd .. [root@client apache-tomcat-9.0.94]# ls bin ??????????conf ????????????jdk1.8.0_271 ?LICENSE ?NOTICE ????RELEASE-NOTES ?temp ????work BUILDING.txt ?CONTRIBUTING.md ?lib ??????????logs ????README.md ?RUNNING.txt ???webapps [root@client apache-tomcat-9.0.94]# cd bin [root@client bin]# ./startup.sh Using CATALINA_BASE: ??/usr/local/tomcat/apache-tomcat-9.0.94 Using CATALINA_HOME: ??/usr/local/tomcat/apache-tomcat-9.0.94 Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.94/temp Using JRE_HOME: ???????/usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/ Using CLASSPATH: ??????/usr/local/tomcat/apache-tomcat-9.0.94/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.94/bin/tomcat-juli.jar Using CATALINA_OPTS: ?? Tomcat started. |
(5)驗證
首先找到“Managing Tomcat”,點擊“manager webapp”,如下圖所示:
然后輸入tomcat的用戶名與密碼完成驗證,如下圖所示:
7.安裝maven(在服務器端安裝)
(1)作用
maven編譯java的源碼并打包
(2)下載
下載apache-maven-3.8.3-bin.tar.gz ????到/usr/local/下 |
(3)解壓
[root@localhost local]# tar -zxf apache-maven-3.8.8-bin.tar.gz |
?(4)驗證
[root@localhost local]# /usr/local/apache-maven-3.8.8/bin/mvn --version Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /usr/local/apache-maven-3.8.8 Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_271/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix" |
(5)配置maven
點擊“Manage Jenkins”,點擊“Global Tool Configuration”,找到“Maven配置”,
填寫Maven相關的文件路徑。如下圖:
下滑找到 Maven ,點擊“新增Maven”,按照安裝的Maven版本號來填寫 Name,此處建議不要自動安裝,所以不要勾選“自動安裝”,然后在 服務器端獲取Maven的路徑填入MAVEN_HOME ,應用保存即可。如下圖:
8.安裝插件
(1)安裝
Maven Integration plugin ???//用來創建一個maven的項目 Deploy to container Plugin ??//用來將war包,發布到遠程去 |
(2)重啟jenkins
[root@localhost ~]# systemctl restart jenkins |
(3)驗證
?
出現“構建一個maven項目”,說明安裝成功!
9.創建maven項目
將任務名稱填入“輸入一個任務名稱”下,并選擇想要構建的項目類型,這里我們選擇“構建一個maven項目”,如下圖:
配置“源碼管理”:選擇“git”來進行源碼管理;將私有的代碼倉庫的地址填入“Repository URL”;此時會出現錯誤提醒,這是因為我們添加的代碼倉庫是私有的,想要使用它必須為其添加憑證,點擊“添加”。如下圖:
點擊“添加”后出現下圖頁面,“類型”選擇“SSH Username with private key”; “Username“為“git”(以代碼倉庫的地址為參考,可知此處使用的用戶名應為git);勾選“Enter directly”,并將服務器的私鑰添加到出現的“key”中,從而使得jenkins可以成功訪問git;最后點擊“添加”。如下圖:
私鑰
[root@localhost ~]# cat ~/.ssh/id_rsa |
如下圖所示,“憑證”添加完成之后,在“Credentials”下選擇“git”,此時可以看到剛才出現的錯誤提示已經消失了。如下圖:
下滑找到“Build”(其功能實質就是使用maven去編譯我們的源碼并生成包),“Root POM”為“pom.xml”;“Goals and options”下填寫maven在編譯時用到的選項,可留空,但在這里我們填寫“clean install –D maven.test.skip=true”這條命令表示在編譯之前先清理,跳過測試。如下圖:
下滑點擊“增加構建后操作步驟”選擇“Editable Email Notification”,在“Project Recipient List”下添加一個額外的郵箱,注意前后需要使用英文逗號隔開,如下圖所示,應用,保存。如下圖:
點擊“立即構建”后,查看“控制臺輸出”,如下圖:
?