轉載:https://www.abcdocker.com/abcdocker/2065php
Pipeline
名詞顧名思義就是流水線的意思,由於公司可能會有不少項目。若是使用jenkins構建完成後,開發構建項目須要一項一項點擊,比較麻煩。因此出現pipeline名詞。
代碼質量檢查完畢以後,咱們須要將代碼部署到測試環境上去,進行自動化測試html
新建部署代碼項目
點擊新建
這裏只須要寫一下描述
執行Shell腳本 node
舒適提示:執行命令主要涉及的是權限問題,咱們要搞明白,jenkins是以什麼權限來執行命令的。那麼問題來了,咱們如今192.168.56.11上,若是在想192.168.56.12上執行命令。須要怎麼作呢?linux
咱們作無祕鑰有2種分案:git
一、使用jenkins用戶將祕鑰分發給192.168.56.12上
二、使用root用戶將祕鑰分發給192.168.56.12上,若是使用root用戶還要進行visudo受權。由於Web上默認執行命令的用戶是jenkinsweb
1.咱們使用root作密碼驗證
#這裏咱們的key已經作好,若是沒作能夠直接 ssh-keygen -t ras
來生成祕鑰
咱們將192.168.56.11上的公鑰複製到192.168.56.12上docker
[root@linux-node1 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1
[root@linux-node2 ~]# vim .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1
[root@linux-node1 ~]# ssh 192.168.56.12
The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established.
ECDSA key fingerprint is b5:74:8f:f1:03:2d:cb:7d:01:28:30:12:34:9c:35:8c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.12' (ECDSA) to the list of known hosts.
Last login: Sat Dec 17 02:14:31 2016 from 192.168.56.1
[root@linux-node2 ~]# ll
total 4
-rw-------. 1 root root 1021 Dec 13 05:56 anaconda-ks.cfg
#如今SSH鏈接就不須要密碼了
受權jenkins用戶,使用visudo或者編輯配置文件/etc/sudoers
[root@linux-node1 ~]# vim /etc/sudoers
92 jenkins ALL=(ALL) NOPASSWD:/usr/bin/ssh
#jenkins受權全部主機,不須要密碼執行ssh。切記不要受權ALL
咱們在192.168.56.12上寫一個簡單shell
腳本,檢測是否能夠執行成功。正式環境能夠寫一個自動化部署的腳本shell
[root@linux-node2 ~]# echo "echo "hello word"" >demo.sh
[root@linux-node2 ~]# chmod +x demo.sh
[root@linux-node2 ~]# ll demo.sh
-rwxr-xr-x 1 root root 16 Dec 17 02:24 demo.sh
jenkins編寫執行腳本
而後咱們點擊當即構建
成功!
如今咱們要將代碼質量管理和測試部署鏈接起來。vim
這時候就用到了git
鉤子
咱們須要安裝jenkins插件parameterized
安全
咱們選擇demo-deploy
再次點擊項目設置的時候就會出現Trigger parameterized build on other projects
提示:Projects to build
是爲構建設置一個項目。例如咱們想構建完代碼項目後執行測試的,這裏就填寫測試的就能夠。
最後點擊保存,點擊構建。咱們查看效果
#這樣咱們每次點擊demo-deploy 它就會在構建完成以後在對auto-deploy進行構建
下載pipeline。這樣只須要構建一個項目,就會幫咱們完成全部相關項目
搜索插件pipeline
等待安裝完成
咱們點擊首頁+號,新建一個試圖
點擊OK
pipeline 配置
而後咱們點擊保存
pipeline視圖以下:
點擊Run
這樣就先代碼質量進行管理,而後就開始部署了
構建成功後:
這樣咱們下次想看pipeline視圖的時候,點擊上面的demo-pipeline便可
Jenkins + gitlab
集成後,實現的功能是 開發寫好代碼提交至gitlab上,當時開始push到gitlab上以後,jenkins自動幫咱們當即構建
這個項目咱們須要安裝一個gitlab鉤子
的腳本
提示: jenkins不論想實現什麼功能,都須要安裝插件!!
安裝完插件以後咱們就開始配置鉤子腳本
這裏須要咱們在服務器裏面寫一個令牌,在jenkins上也寫一個令牌。這兩個能夠鏈接到一塊兒就能夠。
#由於用到了令牌咱們還須要在安裝一個插件,不然將沒法使用。由於令牌是須要登陸以後纔會有,因此須要有一個管理的插件
插件搜索:Build Aut
爲了令牌的安全性,咱們使用openssl生成一個
[root@linux-node1 ~]# openssl rand -hex 10
0a37c6d7ba1fe3472e26
而後咱們點擊保存便可
由於jenkins上也提示咱們須要在gitlab上添加鉤子腳本
點擊咱們建立的項目
選中Webhooks
Build Authorization Token Root Plugin 插件使用說明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
使用Build插件後,url以下:
http://192.168.56.11:8080/buildByToken/build?job=auto-deploy&token=0a37c6d7ba1fe3472e26
auto-deploy=項目名稱(構建時的項目名稱)
0a37c6d7ba1fe3472e26=jenkins填寫的令牌
而後點擊Add Webhook
下方就會出現咱們這個選項,咱們點擊Test
進行測試
測試結果
向git
服務器提交代碼,驗證是否能夠自動部署:
[root@linux-node1 ~]# echo "Build Token Root Plugin" > index.html
[root@linux-node1 ~]# git add index.html [root@saltmaster ~/weather]# git commit -m "text"
[root@linux-node1 ~]# git push origin master
jenkins服務器的日誌記錄:
[root@linux-node1 ~]# tail -f /var/log/jenkins/jenkins.log
jenkins項目構建:
訪問web界面驗證代碼是否最新的:
jenkins控制檯輸出信息: