#Jenkins企業應用進階詳解(一)java
連接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取碼:z7gj 複製這段內容後打開百度網盤手機App,操做更方便哦linux
##1.CI/CD,DevOps介紹git
- 持續集成(Continuous Integration,CI): 代碼合併,構建,部署,測試都在一塊兒,不斷地執行這個過程,並對結果反饋
- 持續交付(Continuous Delivery,CD): 部署到生產環境,給用戶使用
- 持續部署(Continuous Deployment,CD): 部署到生產環境
##2.部署Git版遠程倉庫 ###2.1 系統環境要求 | 主機名 | IP地址 | 備註 | | :---: | :---: | :---: | | Git | 192.168.200.61 | Git服務器 | | Jenkins | 192.168.200.62 | Jenkins服務器 |web
[root@Git ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@Git ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [root@Git ~]# systemctl stop firewalld [root@Git ~]# systemctl disable firewalld [root@Git ~]# systemctl stop NetworkManager [root@Git ~]# systemctl disable NetworkManager
###2.2 部署Git版遠程倉庫apache
#在Git服務器上進行以下操做 #安裝Git [root@Git ~]# yum -y install git [root@Git ~]# rpm -qa git git-1.8.3.1-14.el7_5.x86_64 #建立Git帳戶 [root@Git ~]# useradd git [root@Git ~]# passwd git 更改用戶 git 的密碼 。 新的 密碼:yangwenbo 從新輸入新的 密碼:yangwenbo passwd:全部的身份驗證令牌已經成功更新。
#切換git普戶建立Git遠程倉庫 [root@Git ~]# su git [git@Git ~]$ mkdir repos #建立Git倉庫目錄 [git@Git ~]$ cd repos/ [git@Git repos]$ mkdir app.git #建立app的項目目錄 [git@Git repos]$ cd app.git/ [git@Git app.git]$ pwd /home/git/repos/app.git [git@Git app.git]$ git --bare init #--bare建立一個裸倉庫(只用作遠程推送倉庫不支持本地git命令) 初始化空的 Git 版本庫於 /home/git/repos/app.git/ [git@Git app.git]$ ls branches config description HEAD hooks info objects refs 說明: 使用」git init –bare」方法建立一個所謂的裸倉庫,之因此叫裸倉庫是由於這個倉庫只保存git歷史提交的版本信息,而不容許用戶在上面進行各類git操做,若是你硬要操做的話,只會獲得下面的錯誤(」This operation must be run in a work tree」) [git@Git app.git]$ git status fatal: This operation must be run in a work tree
###2.3 在Jenkins服務器進行git代碼遠程推送測試vim
#在Jenkins服務器上進行以下操做 #安裝Git [root@Jenkins ~]# yum -y install git [root@Jenkins ~]# rpm -qa git git-1.8.3.1-14.el7_5.x86_64 #建立一個目錄,嘗試git clone遠程Git服務器倉庫的代碼 [root@Jenkins ~]# git clone git@192.168.200.61:/home/git/repos/app.git 正克隆到 'app'... git@192.168.200.61's password: yangwenbo warning: 您彷佛克隆了一個空版本庫。
##建立一個文件進行測試 [root@Jenkins ~]# cd app/ [root@Jenkins app]# touch test #建立一個文件 [root@Jenkins app]# echo "welcome to yunjisuan" >> test [root@Jenkins app]# cat test welcome to yunjisuan #配置git全局配置 [root@Jenkins app]# git config --global user.email "1773464408@qq.com" [root@Jenkins app]# git config --global user.name "Mr.yang" #進行代碼提交測試 [root@Jenkins app]# git add * #將文件添加到本地暫存區 [root@Jenkins app]# git commit -m '測試提交' #將代碼提交到本地git倉庫 [master(根提交) 25f1387] 測試提交 1 file changed, 1 insertion(+) create mode 100644 test
[root@Jenkins app]# git remote -v #發現遠程倉庫地址已經被添加過了(以前clone時自動添加) origin git@192.168.200.61:/home/git/repos/app.git (fetch) origin git@192.168.200.61:/home/git/repos/app.git (push) [root@Jenkins app]# git push -u origin master #將代碼推送到遠程倉庫的master分支 git@192.168.200.61's password: yangwenbo Counting objects: 3, done. Writing objects: 100% (3/3), 238 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git * [new branch] master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。 #查看分支狀況 [root@Jenkins app]# git branch -a * master #本地當前所處分支 remotes/origin/master #遠程倉庫已有分支
###2.4 在Jenkins服務器進行SSH免密鑰操做安全
[root@Jenkins ~]# ssh-keygen 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:90j/AJhD6+G3lCJte/4RXn7Xgf1JSwbqv0lLldmXnK0 root@Jenkins The key's randomart image is: +---[RSA 2048]----+ | | | | | . . | | . + . = B| | S +....&+| | + =.B +=.B| | . * =.*oEo=| | o =..++o..| | .oo..=o | +----[SHA256]-----+
#進行公鑰分發 [root@Jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168.200.61 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys git@192.168.200.61's password: yangwenbo Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'git@192.168.200.61'" and check to make sure that only the key(s) you wanted were added.
#測試免密鑰的git推送測試 [root@Jenkins ~]# cd app/ [root@Jenkins app]# ls test [root@Jenkins app]# echo "yunwei" >> test [root@Jenkins app]# tail -1 test yunwei [root@Jenkins app]# git add * [root@Jenkins app]# git commit -m "免密鑰推送測試" [master 21c373a] 免密鑰推送測試 1 file changed, 1 insertion(+) [root@Jenkins app]# git push -u origin master Counting objects: 5, done. Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git 25f1387..21c373a master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
##3. Jenkins的企業應用管理服務器
jenkins官網:https://jenkins.io/ redhat版jenkins官方頁面:https://pkg.jenkins.io/redhat-stable/ ###3.1 Jenkins的安裝與基礎配置 安裝Jenkins的三種方法session
- 利用Yum源安裝
- 下載jenkins的rpm包安裝
- jenkins的war包安裝 ###3.1.1 利用Yum方式安裝最新版本jenkins
#下載Jenkins的yum源文件 [root@Jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo #導入jenkins的rpm證書 [root@Jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key #利用Yum安裝最新版本jenkins [root@Jenkins ~]# yum -y install jenkins [root@Jenkins app]# rpm -qa jenkins jenkins-2.138.2-1.1.noarch #查看jenkins安裝路徑 [root@Jenkins ~]# rpm -ql jenkins /etc/init.d/jenkins /etc/logrotate.d/jenkins /etc/sysconfig/jenkins #jenkins配置文件 /usr/lib/jenkins /usr/lib/jenkins/jenkins.war /usr/sbin/rcjenkins /var/cache/jenkins /var/lib/jenkins /var/log/jenkins
####3.1.2 安裝和配置jdk環境架構
因爲jenkins是java開發的因此須要jdk支持
#解壓安裝jdk [root@Jenkins ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local [root@Jenkins ~]# cd /usr/local [root@Jenkins local]# mv jdk1.8.0_171 jdk [root@Jenkins local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
#配置java環境 [root@Jenkins ~]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Jenkins ~]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Jenkins ~]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Jenkins ~]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Jenkins ~]# source /etc/profile [root@Jenkins ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
####3.1.3 安裝和配置maven環境
#解壓安裝maven [root@Jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/ [root@Jenkins ~]# cd /usr/local/ [root@Jenkins local]# mv apache-maven-3.5.0 maven
#配置maven環境變量 [root@Jenkins ~]# sed -i '$a MAVEN_HOME=/usr/local/maven' /etc/profile [root@Jenkins ~]# sed -i '$a export PATH=${MAVEN_HOME}/bin:$PATH' /etc/profile [root@Jenkins ~]# tail -2 /etc/profile MAVEN_HOME=/usr/local/maven export PATH=${MAVEN_HOME}/bin:$PATH [root@Jenkins ~]# source /etc/profile [root@Jenkins ~]# mvn -v Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00) Maven home: /usr/local/maven Java version: 1.8.0_171, vendor: Oracle Corporation Java home: /usr/local/jdk/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"
####3.1.4 啓動jenkins
#作一個java命令的軟鏈接 [root@Jenkins ~]# ln -s /usr/local/jdk/bin/java /usr/bin/ [root@Jenkins ~]# which java /usr/bin/java #再次啓動jenkins [root@Jenkins ~]# systemctl start jenkins [root@Jenkins ~]# systemctl status jenkins #正常啓動 ● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: active (running) since 日 2018-10-21 10:08:41 CST; 3s ago Docs: man:systemd-sysv-generator(8) Process: 16017 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS) CGroup: /system.slice/jenkins.service └─16036 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME... 10月 21 10:08:36 Jenkins systemd[1]: Starting LSB: Jenkins Automation Server... 10月 21 10:08:36 Jenkins runuser[16022]: pam_unix(runuser:session): session opened for user jenkins b...d=0) 10月 21 10:08:41 Jenkins jenkins[16017]: Starting Jenkins [ 肯定 ] 10月 21 10:08:41 Jenkins systemd[1]: Started LSB: Jenkins Automation Server. Hint: Some lines were ellipsized, use -l to show in full.
#查看jenkins監聽端口8080 [root@Jenkins ~]# netstat -antup | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16036/java #添加開機自啓動 [root@Jenkins ~]# systemctl enable jenkins jenkins.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig jenkins on
http://192.168.200.62:8080 ####3.1.5 初始化jenkins
#查看jenkins解鎖密碼,並複製到jenkins的web界面,解鎖jenkins [root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 3a0f9dd9e961458cb2ef514a4c5b4405
使用默認插件配置安裝便可
####3.1.6 經常使用的系統模塊介紹 ####3.1.7 系統管理--->全局工具配置介紹
- Maven配置: 配置maven的settings.xml配置文件的位置路徑(不修改成默認路徑)。
- 配置JDK: 配置java命令的執行路徑;JDK是java語言的軟件開發工具包。
- 配置Git: 配置Git的命令執行路徑;Git是分佈式版本控制軟件。
- 配置Gradle: 配置Gradle的執行路徑;Gradle是面向java的自動化構建開源工具,同maven。
- 配置Ant: 配置Ant的執行路徑;Ant是面向java的自動化構建開源工具,同maven。
- 配置Maven:配置maven的命令執行路徑;maven是面向java的自動化構建開源工具。
- 配置Docker: 配置Docker的命令執行路徑;Docker是最近大熱的容器級虛擬化產品。 ####3.1.8 全局工具配置----> 配置JDK ####3.1.9 全局工具配置----> 配置Git ####3.1.10 全局工具配置----> 配置maven
- Apache Maven是一種創新的軟件項目管理工具,提供了一個項目對象模型(POM)文件的新概念來管理項目的構建,相關性和文檔。最強大的功能就是可以自動下載項目依賴的庫文件。
- 在開發中,爲了保證編譯經過,開發會處處去尋找項目依賴的jar包(相似rpm安裝軟件時須要的一堆依賴包)
- 所以,就要用到Maven(Ant和gradle也是幹這個的)
- Maven其實就相似Linux的Yum倉庫,能夠自動幫咱們下載(公網源)和安裝java項目所依賴的支持包。
###3.2 用戶權限管理
- 在一個成熟的企業應用環境中,jenkins是須要經過權限來控制角色功能使用的
- 開發人員利用jenkins====>生產環境項目代碼版本發佈(A/B測試等)
- 測試人員利用jenkins====>測試環境自動化部署
- 運維人員利用jenkins====>生產環境項目代碼版本回滾 ####3.2.1 安裝插件Role-based Authorization Strategy
####3.2.2 全局安全配置--->受權策略--->Role-Based Strategy
####3.2.3 註冊兩個用戶(開發和測試)
因爲開啓了Role-Based Strategy,此時用戶沒有任何權限
####3.2.4 系統管理--->Manage and Assign Roles
- Manage Roles:權限管理
- Assign Roles:受權管理
(1)進入權限管理
Golbal roles:全局權限管理
- jenkins的總體權限分配,至少要開讀的權限
Project roles:項目權限管理
- 正則匹配具體的項目,分配管理權限
(2)進入受權管理
- Global roles:全局權限受權
- Item roles:項目權限受權
(3)建立兩個項目分別以A-和B-開頭
(4)登錄用戶user1和user2進行權限登錄測試
###3.3 參數化構建 ####3.3.1 什麼是參數化構建? 參數化構建就是在執行自動構建以前能夠對構建過程手動傳入外部參數,從而改變構建的過程。
(1)配置一個構建腳本,而後執行
(2)添加參數化構建功能
(3)執行參數構建
固然,咱們在構建的時候也能夠修改參數的默認值
####3.3.2 安裝插件Extended Choice Parameter
- Extended Choice Parameter:做用就是在參數化構建時能夠出現一個下拉框讓用戶直接選擇多個值
咱們還能夠在一個文件裏建立參數,而後讓插件引用這個參數
#建立一個參數定義文件 [root@Jenkins ~]# vim /opt/jenkins.property [root@Jenkins ~]# cat /opt/jenkins.property yunjisuan=test01,test02,test06
###3.4 Git參數化構建插件 Git Parameter插件能夠直接獲取Git倉庫的branch,tag等信息 ####3.4.1 安裝插件Git Parameter
####3.4.3 進行Git參數化構建 (1)配置Git Parameter插件
(2)配置Git遠程倉庫
(3)進行Git參數化構建
(4)給Git遠程倉庫增長分支
#在jenkins上操做 [root@Jenkins ~]# mkdir -p /test [root@Jenkins ~]# cd /test/ [root@Jenkins test]# git init 初始化空的 Git 版本庫於 /test/.git/ [root@Jenkins test]# git clone git@192.168.200.61:/home/git/repos/app.git 正克隆到 'app'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (2/2), done. remote: Total 6 (delta 0), reused 0 (delta 0) 接收對象中: 100% (6/6), done. [root@Jenkins test]# ls app [root@Jenkins test]# cd app/ [root@Jenkins app]# ls test [root@Jenkins app]# cat test welcome to yunjisuan yunwei
[root@Jenkins app]# git branch * master [root@Jenkins app]# git branch dev [root@Jenkins app]# git checkout dev 切換到分支 'dev' [root@Jenkins app]# git branch * dev master [root@Jenkins app]# git add * [root@Jenkins app]# git commit -m "開發分支提交" # 位於分支 dev 無文件要提交,乾淨的工做區 [root@Jenkins app]# git push -u origin dev Total 0 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git * [new branch] dev -> dev 分支 dev 設置爲跟蹤來自 origin 的遠程分支 dev。
(5)進行jenkins項目代碼拉取測試
###3.5 Master-Slave架構
主機名 | IP地址 | 備註 |
---|---|---|
Git | 192.168.200.61 | Git服務器(Jenkins的slave節點) |
Jenkins | 192.168.200.62 | Jenkins服務器 |
jenkins的分佈式構建操做,能夠經過slave代理節點來執行項目任務; ####3.5.1 添加一個用於鏈接slave代理節點的SSH證書
####3.5.2 系統管理--->節點管理
特別提示:若是沒有設置工具位置--->jdk ,那麼jenkins會默認去/var/lib/jenkins/jdk下找java命令 ,若是找不到代理就會鏈接不上
####3.5.3 slave節點安裝java環境
#解壓安裝jdk [root@Git ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local [root@Git ~]# cd /usr/local [root@Git local]# mv jdk1.8.0_171 jdk [root@Git local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) #配置java環境 [root@Git ~]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Git ~]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Git ~]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Git ~]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Git ~]# source /etc/profile [root@Git ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
####3.5.4 啓動slave節點代理程序
####3.5.5 查看slave節點啓動日誌
####3.5.6 強制讓項目A-Web01運行在slave1節點上,並運行項目
####3.5.7 查看A-WebA的構建日誌
[root@Git ~]# cd /var/lib/jenkins/workspace/ [root@Git workspace]# ls A-web01 A-web01@tmp [root@Git workspace]# cat A-web01/test welcome to yunjisuan yunwei [root@Git workspace]# hostname -I 192.168.200.61