背景:爲了改變目前手工發佈項目的流程煩鎖,耗時,容易出錯,浪費人力物力財力,低效的情況,搭建基於docker容器化的git+jenkins+maven持續集成自動化部署平臺,實現從代碼提交到生產部署的自動化解決方案,把整個開發生產過程流水線自動化,爲公司節省人力物力財力,爲開發人員省下更多的時間去優化業務功能等。java
可以經過自動化構建、測試和發佈流程,經過運行一整套,一致的質量檢查提升軟件更新的速度和質量。從代碼提交到應用部署的自動化完整流程,確保只有經過自動測試的代碼才能交付和部署,高效替代業內部署複雜、迭代緩慢的傳統方式。git
1、安裝dockerweb
yum -y install docker
啓動docker 後臺服務:docker
service docker start
查看docker版本等詳細信息:shell
2、docker安裝gitlabbash
docker pull gitlab/gitlab-ce:latest
建立並啓動gitlab容器:首次啓動可能比較慢,須要等待一分鐘左右的時間。服務器
docker run --detach --hostname X.X.X.X --publish 8099:80 --publish 2222:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab:z --volume /srv/gitlab/logs:/var/log/gitlab:z --volume /srv/gitlab/data:/var/opt/gitlab:z 453d64ae84c7
啓動成功後,打開hostname指定的地址+端口: http://X.X.X.X:8099, 便可看到gitlab管理後臺, 帳號:root, 密碼本身設置,登陸後:便可添加分組添加用戶及建立項目等操做ssh
建立組名xiejunbo, 建立項目名web, 建立用戶名xiejunbo,並把用戶xiejunbo加入組。maven
添加用戶本機和jenkins所在服務器的SSH-KEY:gitlab
WINDOWS 10:
CentOS7:
在user-->settings-->SSH Keys添加:
初始化maven項目web,並推送上gitlab:
3、docker安裝jenkins
拉取鏡像
docker pull jenkins/jenkins
建立jenkins容器:指定jenkins目錄,8080端口映射,maven目錄和java目錄
docker run -d --name jenkins -p 8088:8080 -p 50000:50000 -v /usr/local/jenkins_home:/var/jenkins -v /usr/share/maven:/usr/local/maven -v /usr/jdk1.8.0_144:/usr/local/jdk 861760a10fdb
啓動容器:
打開http://X.X.X.X:8088, 首次打開:
進入jenkins容器拿到對應password後進入下一步
docker exec -it 9b5 /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
選擇默認或自定義模式安裝對應插件,而後進入jenkins容器獲取密碼, 而後安裝對應插件(選上JUnit Plugin,SSH plugin,分別用於自動化單元測試和執行遠程服務器shell腳本, 還有個Maven Integration plugin, 用於Maven集成,不然新建的時候沒有Maven Project):
而後設置用戶名和密碼,以下:
4、配置jenkins
系統管理-->系統設置,底部,配置郵件通知:
設置管理員郵件:
設置smtp郵件代理:
測試收件:
接下來配置maven_home, maven配置文件地址,java_home及git:
建立一個maven風格的web項目:
填寫基本項:
jenkins配置推送觸發事件:
在gitlab後臺配置事件接口及token:
測試提交代碼到gitlab,觸發事件推送,jenkins開始執行構建任務。
配置jenkins服務器和部署服務器ssh-key證書,實現從jenkins服務器到部署服務器免密碼登陸:
遇到的坑:
1. jenkins所在服務器的key驗證失敗
解決方法:jenkins所在服務器刪除掉server, 從新設置server便可。
2.從一個非tty環境執行腳本;Jenkins不能正常從你的腳本中退出
解決方法:jenkins腳本配置選項,選中
Exec in pty |
配置servers:
部署腳本:
cd demo-service/bin echo hellooooooooooooooooooooooooooooooooooooooo cd /root/demo-service/bin nohup ./execute.sh restart echo ================= end ====================
5、提交代碼測試結果
過程:(開發人員只需完成第1步,其他步驟自動完成)
1. 修改代碼,提交到gitlab。
2. gitlab觸發push事件到jenkins。
3. jenkins收到push事件後,開始從gitlab下更新最新代碼。
4. jenkins用maven編譯構建打包項目。
5. 編譯打包經過後調用部署腳本進行自動部署。
自動部署成功