Jenkins是一個功能強大的應用程序,容許持續集成和持續交付項目,不管用的是什麼平臺。這是一個免費的源代碼,能夠處理任何類型的構建或持續集成。集成Jenkins能夠用於一些測試和部署技術。Jenkins是一種軟件容許持續集成。php
一、持續、自動地構建/測試軟件項目。
二、監控軟件開放流程,快速問題定位及處理,提示開放效率。html
開源的java語言開發持續集成工具,支持CI,CD。
易於安裝部署配置:可經過yum安裝,或下載war包以及經過docker容器等快速實現安裝部署,可方便web界面配置管理。
消息通知及測試報告:集成RSS/E-mail經過RSS發佈構建結果或當構建完成時經過e-mail通知,生成JUnit/TestNG測試報告。
分佈式構建:支持Jenkins可以讓多臺計算機一塊兒構建/測試。
文件識別:Jenkins可以跟蹤哪次構建生成哪些jar,哪次構建使用哪一個版本的jar等。
豐富的插件支持:支持擴展插件,你能夠開發適合本身團隊使用的工具,如git,svn,maven,docker等。java
產品設計成型 -> 開發人員開發代碼 -> 測試人員測試功能 -> 運維人員發佈上線
持續集成 (Continuous integration,簡稱CI)
持續交付(Continuous delivery)
持續部署(continuous deployment)mysql
持續集成:多名開發者在開發不一樣功能代碼的過程當中,能夠頻繁的將代碼進行合併到一塊兒不相互影響工做。linux
持續部署:是基於某種工具或平臺實現代碼自動化的構建、測試和部署到線上環境以實現交付高質量的產品,持續部署在某種程度上表明了一個開發團隊的更新迭代速率。c++
開發本身上傳 --最原始的方案 開發給運維手動上傳 --運維本身手動部署 運維使用腳本複製 --半自動化 結合web界面一鍵部署 --自動化
在公司的服務器安裝某種程序,該程序用於按照特定格式和方式記錄和保存公司多名開發人員不按期提交的源代碼,且後期能夠按照某種標記及方式對用戶提交的數據進行還原。git
CVS--早期的集中式控制系統 SVN--集中式版本控制系統
--集中式管理,依賴於網絡,一臺服務器集中管理 Gitlib--分佈式版本控制系統 --2002年由Linux內核做者linus使用C語言開發
--分佈式版本控制系統,不依賴於服務器,離線依然能夠工做
網站:https://github.comgithub
任何的提交和回滾都依賴於鏈接服務器web
SVN服務器是單點sql
Git在每一個用戶都有一個完整的服務器,而後在有一箇中央服務器,用戶能夠先將代碼提交到本地,沒有網絡也能夠先提交到本地,而後在有網絡的時候再提交到中央服務器,這樣就大大方便了開發者,而相比CVS和SVN都是集中式的版本控制系統,工做的時候須要先從中央服務器獲取最新的代碼,改完以後須要提交,若是是一個比較大的文件則須要足夠快的網絡才能快速提交完成,而使用分佈式的版本控制系統,每一個用戶都是一個完整的版本庫,即便沒有中央服務器也能夠提交代碼或者回滾,最終再把改好的代碼提交至中央服務器進行合併便可。
# yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion -y # yum install curl policycoreutils openssh-server openssh-clients postfix -y # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # systemctl disable firewalld # sed -i '/SELINUX/s/enforcing/disabled/' /etc/sysconfig/selinux # hostnamectl set-hostname xxx.com.cn # yum update –y && reboot
# vim /etc/yum.repos.d/gitlib.repo [gitlab-ce] name=gitlab-ce baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key # yum install gitlab-ce
Rpm包下載地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
[root@gitlib-server ~]#vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.10.130'
external_url ‘http://192.168.10.130‘ #服務器IP地址
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "rooroot@163.com" gitlab_rails['smtp_password'] = "zhang@123" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false gitlab_rails['gitlab_email_from'] = "rooroot@163.com" user["git_user_email"] = "rooroot@163.com"
執行配置並啓動服務: # gitlab-ctl reconfigure #修改完配置文件要執行此操做 # gitlab-ctl start # gitlab-ctl stop # gitlab-ctl restar
#ss -ntl
驗證端口及狀態 80端口和8080端口是在初始化gitlib的時候啓動的,所以若是以前的有程序佔用會致使初始化失敗或沒法訪問!
登陸web頁面並設置密碼,最少8位: http://192.168.130.8
登錄,默認用戶weiroot
默認頁面
默認狀況下能夠直接註冊帳號,所以,通常都關閉此功能
取消帳戶註冊功能以後點save
添加一個帳號
使用第一次的新帳號登陸要設置密碼
發送設置密碼郵件
在收件箱打開郵件設置密碼
設置密碼
使用管理員建立項目
組裏能夠有多個項目分支,能夠將開發添加到組裏面進行設置權限,不一樣的組就是公司不一樣的開發項目或者業務模塊,不一樣的組添加不一樣的開發便可實現對開發設置權限的管理
找到項目界面
添加一個頁面
# yum install git –y # mkdir /source # cd /source/ # git clone http://192.168.10.130/myweb/myweb1.git
# git config --global user.name "jack「 # git config --global user.email 2973707860@qq.com # cd myweb1 # vim index.html # git add index.html # git commit -m "333「 # git push -u origin
git config --global user.name 「name「 #設置全局用戶名,能夠非真實帳戶 git config --global user.email xxx@xx.com #設置全局郵箱,能夠非真實郵箱 git config --global –list #列出用戶全局設置 git add index.html #添加文件到暫存區 git commit -m 「11「 #提交文件到工做區 git status #查看工做區的狀態 git push #提交代碼到服務器 git pull #獲取代碼到本地 git log #查看操做日誌 vim .gitignore #定義忽略文件 git reset --hard HEAD^ #git版本回滾, HEAD爲當前版本,加一個^爲上一個,^^爲上上一個版本 git reflog # #獲取每次提交的ID,可使用--hard根據提交的ID進行版本回退 git reset --hard 5ae4b06 #回退到指定id的版本 # git branch #查看當前所處的分支 git checkout -- file #從服務器更新某個那文件覆蓋本地的文件
# useradd www -u 2000 # mkdir /apps && cd /apps # tar xvf jdk-7u79-linux-x64.tar.gz # ln -sv /apps/jdk1.7.0_79 /apps/jdk # vim /etc/profile export export LANG="en_US.utf-8" export JAVA_HOME=/apps/jdk export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin # source /etc/profile && java -version # tar xvf apache-tomcat-7.0.59.tar.gz # ln -sv /apps/apache-tomcat-7.0.59 /apps/tomcat
# cp /root/tomcatd /etc/init.d/
# mkdir /data/tomcat_appdir #保存web壓縮包 # mkdir /data/tomcat_webdir #保存解壓後的web目錄 # cd tomcat_webdir # mkdir myapp # echo tomcatX > /apps/tomcat_webdir/myapp/index.html
# tar xvf haproxy-1.5.18.tar.gz # cd haproxy-1.5.18 # make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.5.18 # make install PREFIX=/usr/local/haproxy-1.5.18 # ln -sv /usr/local/haproxy-1.5.18/ /usr/local/haproxy # cp examples/haproxy.init /etc/init.d/haproxy #啓動腳本 # chmod a+x /etc/init.d/haproxy # chkconfig --add haproxy && chkconfig haproxy on # ln -sv /usr/local/haproxy/sbin/haproxy /usr/sbin/ # mkdir /etc/haproxy # cp examples/haproxy.cfg /etc/haproxy/
C:\Windows\System32\drivers\etc\hosts 192.168.10.132 myapp.web.com
# vim /etc/rsyslog.conf: 14 # Provides UDP syslog reception 15 $ModLoad imudp #去掉註釋 16 $UDPServerRun 514 #去掉註釋 18 # Provides TCP syslog reception 19 $ModLoad imtcp #去掉註釋 20 $InputTCPServerRun 514 #去掉註釋 # systemctl restart rsyslog log 127.0.0.1 local0 info #global部分 frontend web_port #監聽端口 bind 0.0.0.0:80 mode http option httplog log global option forwardfor
重啓rsyslog和haproxy服務,驗證/var/log/haproxy.log能夠記錄日誌:
能夠將數據保存在單獨的磁盤
mkfs.xfs /dev/sdb mount /dev/sdb /data/ chown jenkins.jenkins /data/ -R
經過rpm包安裝jenkins
rpm –ivh jdk-8u111-linux-x64.rpm rpm –ivh https://pkg.jenkins.io/redhat/jenkins-2.27-1.1.noarch.rpm /etc/init.d/jenkins start chkconfig jenkins on
沒法正常啓動jenkins
沒有java環境
使用官方倉庫安裝:
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key # yum install java jenkins
直接下載二進制安裝包:
# tar xvf jdk-8u111-linux-x64.tar.gz -C /usr/local/src/ # ln -sv /usr/local/src/jdk1.8.0_111 /usr/local/jdk # vim /etc/profile export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar # source /etc/profile && java –version
使用rpm安裝包安裝java並啓動jenkins:
#rpm –ivh jdk-8u111-linux-x64.rpm
# vim /etc/sysconfig/Jenkins JENKINS_HOME=「/data「 #數據目錄,使用高IO大容量磁盤 JENKINS_USER=「jenkins「 #啓動用戶 JENKINS_PORT=「8080「 #啓動端口
若是虛擬及配置較低,則啓動頁面可能須要很長的時間,所以推薦4G或更多內存,4C或更多CPU
從新完成的日誌
# tail /var/log/jenkins/jenkins.log -f
輸入安裝的下一步
Jenkins插件安裝
插件安裝過程當中,若是由安裝失敗不要緊,能夠後期安裝
若是自動安裝失敗,能夠減壓準備好的插件
#cd /var/lib/jenkins/plugins #tar xvf jenkins_plugin.tar.gz #chown jenkins.jenkins ./* -R #/etc/init.d/jenkins start
插件下載地址
http://updates.jenkins-ci.org/download/plugins/
注:未安裝成功的插件最好從新安裝下
建立登陸用戶
帳號建立完成
gitLab
gitlab Hook Plugin
插件安裝界面,會額外安裝一些依賴關係的插件,jenkins插件有的基於ruby開發,因此會安裝ruby環境
在gitlab管理界面將用戶添加到一個項目,下一步要用此用戶拉取項目代碼
確認用戶對項目有提交的權限
部署key能夠用於獲取代碼
測試能夠不使用用戶名密碼,直接獲取代碼
添加一個認證用戶,拉取git代碼的時候使用
http://192.168.10.131:8080/credentials/store/system/domain/_/newCredentials
建立項目
配置git項目地址和用戶
點擊當即構建
官網:hrttp://www.sonarqube.org/
Sonar 是一個用於代碼質量管理的開放平臺,經過插件機制,Sonar 能夠集成不一樣的測試工具,代碼分析工具,以及持續集成工具。與持續集成工具(例如 Hudson/Jenkins 等)不一樣,Sonar 並非簡單地把不一樣的代碼檢查工具結果(例如FindBugs,PMD等)直接顯示在Web頁面上,而是經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。在對其餘工具的支持方面,Sonar 不只提供了對 IDE 的支持,能夠在 Eclipse 和 IntelliJ IDEA 這些工具裏聯機查看結果;同時Sonar還對大量的持續集成工具提供了接口支持,能夠很方便地在持續集成中使用 Sonar,此外,Sonar 的插件還能夠對 Java 之外的其餘編程語言提供支持,對國際化以及報告文檔化也有良好的支持。
數據庫不支持5.5的版本,支持5.6之後的版本。
# yum -y install autoconf && tar xvf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz #ln -sv /usr/local/src/mysql-5.6.34-linux-glibc2.5-x86_64 /usr/local/mysql #cd /usr/local/mysql/ # useradd mysql -s /sbin/nologin # chown -R mysql.mysql ./* -R # mkdir /data && chown mysql.mysql /data/ -R # /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/ --basedir=/usr/local/mysql/ #cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql #cp /usr/local/mysql/my.cnf /etc/my.cnf # vim /etc/my.cnf basedir = /usr/local/mysql datadir = /data port = 3306 #/etc/init.d/mysql start #ln -sv /usr/local/mysql/bin/mysql /usr/bin/
# /usr/local/mysql/bin/mysql CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON sonar.* TO sonar@"jenkins-server.example.com" IDENTIFIED BY "123456"; GRANT ALL ON sonar.* TO sonar@"192.168.100.%" IDENTIFIED BY "123456"; FLUSH PRIVILEGES; /usr/local/mysql/bin/mysql -usonar -p123456 -h192.168.10.131
sonar依賴於java環境,並且java版本必須是1.8版本或更高,不然sonar啓動失敗
# unzip sonarqube-5.6.zip #ln -sv /usr/local/src/sonarqube-5.6 /usr/local/sonar [root@jenkins-server ~]# grep "^[za-Z]" /usr/local/sonar/conf/sonar.properties sonar.jdbc.username=sonar sonar.jdbc.password=123456 sonar.jdbc.url=jdbc:mysql://192.168.10.131:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.web.port=8800 # /usr/local/sonar/bin/linux-x86-64/sonar.sh start
#/usr/local/sonar/extensions/plugins/ #插件本地路徑 安裝中文插件: administration-system-update center-available,在後面的搜索框搜索插件名稱,而後點install安裝: 或在插件目錄/usr/local/sonar/extensions/plugins執行wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.11/sonar-l10n-zh-plugin-1.11.jar而後重啓服務: # /usr/local/sonarqube-5.6/bin/linux-x86-64/sonar.sh restart
Sonar經過掃描器進行代碼質量分析,即掃描器的具體工做就是掃描代碼
下載地址:
http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
# unzip sonar-scanner-2.6.1.zip # ln -sv /usr/local/src/sonar-scanner-2.6.1 /usr/local/sonar-scanner # cd /usr/local/sonar-scanner/ # grep "^[a-Z]" conf/sonar-scanner.properties sonar.host.url=http://localhost:8800 sonar.sourceEncoding=UTF-8 sonar.jdbc.username=sonar sonar.jdbc.password=123456 sonar.jdbc.url=jdbc:mysql://192.168.10.131:3306/sonar?useUnicode=true&characterEncoding=utf8
# cd /home/jack/ # unzip sonar-examples-master.zip # cd sonar-examples-master # cat projects/languages/php/php-sonar-runner/sonar-project.properties #如下是默認配置 # Required metadata sonar.projectKey=org.sonarqube:php-simple-sq-scanner #key sonar.projectName=PHP :: Simple Project :: SonarQube Scanner #項目名稱,會顯示在儀表盤 sonar.projectVersion=1.0 #版本 # Comma-separated paths to directories with sources (required) sonar.sources=src #代碼目錄 # Language sonar.language=php #語言格式爲php # Encoding of the source files sonar.sourceEncoding=UTF-8 #編碼格式
#pwd /home/jack/sonar-examples-master/projects/languages/php/php-sonar-runner #/usr/local/sonar-scanner/bin/sonar-scanner #手動在當前目錄執行掃描,如下是掃描過程的提示信息
掃描的配置文件能夠在每一個項目都放一個,或在Jenkins界面作配置
在jenkins插件安裝界面安裝sonar插件sonarqube plugin
系統管理—系統設置
添加掃描器
系統管理-Global Tool Configuration
選擇本身的項目(demo)-->-構建觸發器-- >構建-->execute
sonarqube scanner,將配置文件的內容修改爲以下格式填寫完成後點保存
sonar.projectKey=test-demo sonar.projectName=test-demo sonar.projectVersion=1.0 sonar.sources=./ sonar.language=php sonar.sourceEncoding=UTF-8
點擊項目的當即構建,下圖是執行成功的信息
查看項目的構建歷史
構建失敗後會發送郵件通知管理員
將代碼部署到web服務器
建立項目
新建一個項目叫test-deploy用於代碼發佈,上一個項目test-demo可用於代碼測試,當測試階段出現問題的時候也不會當即進行發佈,只有當測試經過後才執行發佈的項目。
如何將代發佈到web服務器上?
能夠經過執行命令或腳本的方式進行代碼發佈,在各web服務器包括Jenkins服務器建立一個www用戶,保持id一致,用於啓動web服務並進行代碼發佈
# useradd www # echo "123456" | passwd --stdin www # su - www $ ssh-keygen
添加jenkins服務器www用戶的公鑰到git服務器項目當中
確認www用戶的key能夠拉取代碼
關於權限
通常使用非root用戶啓動web服務及完成代碼發佈,默認Jenkins運行使用的是Jenkins用戶,所以須要賦予Jenkins用戶必定的權限,另外發布的腳本能夠在本機也能夠不在本機,須要使用Jenkins用戶ssh到發佈服務器執行shell腳本。 將腳本放在/home/www用戶家目錄,git代碼也放在家目錄,所以須要jenkins服務器遠程到代碼發佈服務器執行遠程命令,須要作免登錄認證,將jenkins服務器root和www用戶的公鑰放在代碼部署服務器的www用戶家目錄.ss/authorized_keys文件中: # su - www $ vim /home/www/.ssh/authorized_keys
$ chmod 600 authorized_keys
在root用戶和www用戶下ssh到本機的www用戶,確承認以避免密碼登陸,以便讓部署服務器將用戶的key添加到know_keys,不然報錯Host key verification failed:
配置jenkins用戶sudo權限
# vim /etc/sudoers 56 # Defaults requiretty #不須要tty 99 jenkins ALL=(ALL) NOPASSWD: /usr/bin/ssh #不須要使用密碼便可執行ssh
腳本內容
$ cd /home/www/ $ vim deploy.sh #!/bin/bash echo $USER cd /home/www/myweb1 git pull scp -r ./* www@192.168.10.133:/apps/tomcat/webapps/myapp scp -r ./* www@192.168.10.134:/apps/tomcat/webapps/myapp
在test-deploy項目的構建步驟調用,項目—配製—構建
執行結果
複製www用戶公鑰到各web服務器的www用戶
$ ssh-copy-id www@192.168.10.133 $ ssh-copy-id www@192.168.10.134
在另一臺服務器編輯代碼後從新提交: # git clone http://192.168.10.130/web/myweb1.git # echo 「xxx」 >> index.html # git add index.html # git commit index.html # git push 在jenkins執行項目構建 構建項目以前要在www用下的xxx項目裏面進行git pull命令。不然第一次更新提示輸入yes會致使部署失敗 再次提交代碼
配置項目test-demo的構建後操做,demo構建完成後自動構建demp-deploy項目
添加構造後操做
構建關聯成功
安裝pipeline插
添加試圖
定義名稱
配置視圖
GitLab觸發jenkins構建項目
目的爲在公司的測試環境當中一旦開發向gitlab倉庫提交成功代碼,gitlab通知jenkins進行構建項目、代碼質量測試而後部署至測試環境,注意這只是測試環境,而生產環境依然須要手動部署代碼
安裝Gitlab Hook Plugin插件:
#系統管理-管理插件-可選插件-Gitlab Hook Plugin和Build Authorization Token Root Plugin
# openssl rand -hex 12 f7d0ead5398bd808ee139067
#插件使用介紹,https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin #選擇項目-設置-webhooks: http://192.168.10.131:8080/buildByToken/build?job=test-demo&token=f7d0ead5398bd808ee139067 格式以下: http://X.X.X.X:8080/buildByToken/build?job=項目名&token=隨機數
保存後進行測試
測試成功
在另外一臺向git服務器提交代碼,驗證是否自動化部署
# echo "ccc" >> index.html # git add index.html # git commit -m "ccc「 # git push
驗證成功構建
在Jenkins服務器複製www用戶的公鑰到haproxy服務器: $ ssh-copy-id root@192.168.10.132 # ssh-copy-id root@192.168.10.132 Haproxy服務器編輯# vim /etc/sudoers必需要tty # vim /etc/sudoers root ALL=(ALL) ALL jenkins ALL=(ALL) NOPASSWD: /usr/bin/ssh www ALL=(ALL) ALL
測試www和root用戶的ssh功能
開啓功能 # vim /etc/haproxy/haproxy.cfg stats socket /usr/local/haproxy/stats mode 600 level admin 安裝命令並測試 yum install socat #echo "help"| socat stdio /usr/local/haproxy/stats # echo "show info"| socat stdio /usr/local/haproxy/stats #echo "show stat"| socat stdio /usr/local/haproxy/stats # echo "disable server myapp_host/web2"|socat stdio /usr/local/haproxy/stats
echo "enable server myapp_host/web2"|socat stdio /usr/local/haproxy/stats
分組是爲了在代碼分批次上線的時候對後端服務器的一種篩選方法