Jenkins是什么?
- 基於JAVA的開源的自動化系統平台
- 加速自動化CI,CD任務及流水線,所有類型的任務:構建,測試,部署等
- 豐富的插件生態系統支持功能擴展,1400+插件和SCM,測試,通知,報告,Artfact,觸發,外部集成等
- 基於Web的管理和使用界面
- 源於Hudson
- 官網文檔:https://jenkins.io/doc/
Jenkins系統架構圖
用docker環境部署Jenkins
一,安裝docker-ce版本
1.1 刪除之前版本的Docker
sudo yum remove docker docker-common docker-selinux docker-engine
1.2 安裝一些依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
1.3 下載repo文件
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
1.4 把軟件倉管地址替換為 TUNA:
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
1.5 安裝
sudo yum makecache fast sudo yum install docker-ce
參考文檔:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
1.6 安裝完成后可以使用:dock version 命令查看docker信息
[root@linux-node1 ~]# docker version Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:41:23 2017 OS/Arch: linux/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:42:49 2017 OS/Arch: linux/amd64 Experimental: false
二,安裝docker-compose
2.1 先確認完成docker環境安裝,再執行此步驟
2.2 參考文檔:
https://docs.docker.com/compose/install/
2.3 以linux為例:
2.3.1下載docker compose執行文件
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2.3.2 添加執行權限
sudo chmod +x /usr/local/bin/docker-compose
2.3.3 驗證結果
docker-compose --version docker-compose version 1.17.0, build 1719ceb
三,下載鏡像文件
3.1 配置國內docker鏡像加速,國內拉取官方docker鏡像速度較慢
[root@linux-node1 data]# more /etc/docker/daemon.json {"registry-mirrors": ["http://4c7d9402.m.daocloud.io"]}
3.2 下載docker的Jenkins鏡像
docker pull jenkins:latest
3.3 下載gitlab-ce(如果需要可以下載,可選擇)
docker pull gitlab/gitlab-ce:latest
3.4 下載daoker的sonarqube(如果需要可以下載,可選擇)
docker pull sonarqube:latest
3.5 驗證docker鏡像下載結果
[root@linux-node1 data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gitlab/gitlab-ce latest 733cc235d0c0 3 days ago 1.38GB sonarqube latest c1637bd4502f 12 days ago 934MB jenkins latest 3f08dc4f3f5d 3 weeks ago 809MB
3.6 啟動jenkins的docker鏡像
docker run -it --name jenkinsci0001 -v $HOME/jenkins:/var/ -p 8888:8080 -p 55000:50000 -p 45000:45000 jenkins:latest
在控制台顯示信息如下

... org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@6b4ba523]: org.springframework.beans.factory.support.DefaultListableBeanFactory@ed6a5eb Nov 26, 2017 5:29:44 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@ed6a5eb: defining beans [authenticationManager]; root of factory hierarchy Nov 26, 2017 5:29:45 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@6fd126d1: display name [Root WebApplicationContext]; startup date [Sun Nov 26 05:29:45 UTC 2017]; root of context hierarchy Nov 26, 2017 5:29:45 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@6fd126d1]: org.springframework.beans.factory.support.DefaultListableBeanFactory@62e4ea3c Nov 26, 2017 5:29:45 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@62e4ea3c: defining beans [filter,legacy]; root of factory hierarchy Nov 26, 2017 5:29:46 AM jenkins.install.SetupWizard init INFO: ************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: da4d937a40144c53a05e4383273c902b This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* ************************************************************* ************************************************************* --> setting agent port for jnlp --> setting agent port for jnlp... done Nov 26, 2017 5:30:15 AM hudson.model.UpdateSite updateData INFO: Obtained the latest update center data file for UpdateSource default Nov 26, 2017 5:30:17 AM hudson.model.DownloadService$Downloadable load INFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller Nov 26, 2017 5:30:21 AM hudson.model.DownloadService$Downloadable load INFO: Obtained the updated data file for hudson.tools.JDKInstaller Nov 26, 2017 5:30:21 AM hudson.model.AsyncPeriodicWork$1 run INFO: Finished Download metadata. 42,015 ms Nov 26, 2017 5:30:48 AM hudson.model.UpdateSite updateData INFO: Obtained the latest update center data file for UpdateSource default Nov 26, 2017 5:30:48 AM hudson.WebAppMain$3 run INFO: Jenkins is fully up and running
3.7 打開登陸界面,根據提示輸入上面的顯示的密碼
3.8 選擇默認推薦安裝的插件
3.9 等待插件安裝
3.10 設置賬戶密碼
....
3.11 進入頁面
四,使用yum安裝部署Jenkins
4.1 添加源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
4.2 導入key
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
4.3 yum安裝 jenkins
yum install jenkins -y
為什么要使用Jenkins?
在2015年前我們公司上線流程是:
1.測試環境權限開發給開發人員,開發調試看日志拉代碼都是開發自己登陸到測試機上面操作
2.開發提測,QA通過后,開發人員發郵件到ops抄送其他相關部門申請上線,需要開發主管確認等,ops再登服務器拉取發布代碼到生產環境(就是說項目定在幾點上或者延遲上ops都得苦逼的等着)
3.ops發布完成回復郵件(每星期都會收到大量的上線郵件)
4.QA回滾測試
在2016年ops和其他同行聊天抱怨的時候,人家說你們怎么不用Jenkins。那時候因為年少無知Jenkins是什么鬼啊,然后回來就開始研究,直到下半年就開始慢慢都用上了,現在是:
測試環境:收回開發人員登錄系統權限,代碼自動觸發更新,日志通過ELK實時查看
生產環境:ops基本不參與上線項目,和開發負責人確認哪些開發人員可以有哪些項目的上線權限,ops授權開發人員上線,服務器上面有代碼更新會腳本自動發郵件到ops。
具體開發內部怎么上線由開發負責人決定,當業務有問題的時候ops再根據Jenkis的上線記錄排查問題,ops可以節省大量時間去其它維護工作。
配置參考圖片
相關的項目:php java .net
版本庫有:svn gitlab
服務器系統:CentOS Windows
Jenkins系統設置:需要在Jenkins服務器上安裝一些工具軟件,然后再web界面添加環境變量等信息,這里用的ssh秘鑰和服務器同步代碼
配置Jenkins賬號和Gitlab賬號信息有關聯
設置Jenkins專有用戶數據庫
Androids apk打包配置
Java編譯發布配置
項目構建情況,測試環境在Gitlab的trunk分鍾,開發人員提交代碼到trunk就會觸發Jenkins拉取代碼發布到業務服務器上面
php正式環境需要開發主管自己登陸到Jenkins進行點擊發布
用戶權限管理
用戶分組及項目創建
用戶項目權限分配
測試環境,自動構建
正式環境master分支,開發主管點擊構建發布
GitLab8.9 Webhooks設置
使用Jenkins的里面授權的賬號,GitLab的只讀權限就可以
Windows配置Jenkins讓.NET項目自動編譯發布

定時自動發版工具 插件 MSBuild Plugin subversion.hpi Global Tool Configuration MSBuild v4.0.30319 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 任務 byexx SVN svn://192.168.xx.xx/boxx/Byexx.BOxx.Serxx@HEAD Build periodically Poll SCM * * * * * v4.0.30319 Byexxx.BOxx.API.sln /m /t:Rebuild /property:Configuration=Release;TargetFrameworkVersion=v3.5;OutputPath=D:\xx_site\sxx.com\bin 1.編譯完的路徑 2.svn://192.168.xx.xx/boxx/Byexx.BOxx.Serxx@HEAD
插件安裝,subversion或者git取決根據代碼服務器實際情況選擇安裝即可
Global Tool Configuration添加MSBuild工具
配置項目
測試環境代碼拉取及日程表
構建及代碼發布目錄配置
每分鍾輪詢如測試環境有新代碼提前就觸發代碼拉取編譯發
來自網絡