Jenkins持續集成與部署

1.1 開發寫代碼的演變

好景不長,開發愈來愈多,代碼文件愈來愈多,天天下班前合併代碼時,發現不少合併失敗的文件。最後天天加班3小時人工合併代碼。php

 

解決方法:將合併代碼的週期縮短,之前一天,如今一小時,半小時。。。html

 

隨時隨地地將代碼合併,這種方法叫作持續集成。java

 

1.2 持續集成(簡稱CI

說明:持續集成說的是頻繁地(一天屢次)將代碼集成到主幹。linux

 

它的好處主要有兩個:git

一、快速發現錯誤。每完成一點更新,就集成到主幹,能夠快速發現錯誤,定位錯誤也比較容易。web

二、放置分支大幅偏離主幹。若是不是常常集成,主幹又在不斷更新。會致使之後集成的難度變大,甚至難以集成shell

 

1.3 JENKINS的做用

說明:藉助一個自動化的部署工具,叫作JENKINS,開發上傳本身的代碼到GITLAB(私有倉庫),GITLAB(私有倉庫)發信息通知JENKINS,隨後JENKINS從倉庫拉取代碼,最後全自動部署到測試服務器進行相關測試,並將測試結果通知運維和開發,更懶得方法可把這個工具可給開發使用,這樣之後就事情少了不少,這種自動測試的方法叫作持續交付。vim

 

1.3.1 JENKINGS做用我的簡單小總結

說明:至關於開發將代碼上傳到GITLAB私有倉庫,倉庫就會自動通知JENKINS自動從倉庫里拉取代碼,最後部署到測試服務器裏測試,測試的好壞結果通知發給運維和開發windows

 

1.4 持續交付

持續交付指的是,頻繁地將軟件的新版本,交付給質量團隊或者用戶,以供評審。若是評審經過,代碼就進入生產階段服務器

 

持續交付能夠看做持續集成的下一步。它強調的是,無論怎麼更新,軟件是隨時隨地能夠交付的

 

1.5  持續部署

持續部署是持續交付的下一步,指的是代碼經過評審之後,自動部署到生產環境。將代碼部署到服務器,就叫持續部署,可以使用ansible或JENKINS,可是公司不是很相信工具,因此絕大部分都相信人工上線部署。

 

行話

CI/CD 持續集成/持續交付/持續部署。

 

1.6 JENKINS介紹

JENKINS用JAVA編寫的開源的持續集成工具,至關於寫好任意的shell腳本和windows批處理命令可放到JENKINS自動運行,自動部署。

 

1.7 安裝JENKINS的環境準備

一、準備2檯安裝好Centos7.2系統的虛擬機,內存1G+

二、全部虛擬機的防火牆和Selinux關閉

三、主機名及IP地址關係以下:

Jenkins 10.0.0.202  #不須要安裝軟件

Gitlab  10.0.0.201  #安裝好gitlab

 

四、Linux中能發郵件的帳號

 

1.8 安裝JENKINS的方法

1.8.1 使用RPM包安裝

RPM包下載地址:

http://pkg.jenkins.io/redhat-stable/

清華園地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

 

1.8.2 yum安裝jdk

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel    #只有安裝了jdk軟件才能使用jenkins的軟件。

 

1.8.3 安裝rpm

rpm -ivh jenkins-2.73.1-1.1.noarch.rpm     #這裏能夠去官網下載,而後安裝這個rpm包,由於沒有任何依賴。

 

1.8.4 啓動

/etc/init.d/jenkins start

 

1.8.5 打開網頁安裝Jenkins

http://10.0.0.202:8080     #切記是8080端口。

 

這裏須要解鎖Jenkins,須要按照他給的路徑,進行復制密碼填入框裏。

 

cat /var/lib/jenkins/secrets/initialAdminPassword     #打開這個文件,而且複製密碼到網頁裏點擊Continue下一步,裏面的密碼是每次隨機的,不是固定的,當要再次輸入密碼時再打開文件複製密碼。

 

提示安裝插件,默認安裝與自定義安裝都是找官網下來,過程比較慢,這裏什麼都不選,點擊右上角的X取消。

 

跳過安裝插件的界面。

 

這就是jenkins的歡迎使用界面了。

 

1.9 解壓插件放置Jenkins插件目錄

cp plugins.tar.gz /var/lib/jenkins/        #個人插件壓縮包是針對plugins這個目錄的,因此須要放到這個目錄進行解壓

tar -xf plugins.tar.gz                 #進行解壓這個文件,將插件文件放到文件夾裏面。

 

/etc/init.d/jenkins restart             #解壓完後,要重啓jenkins才能生效,經常使用插件就已經補全了,全部默認的插件都在裏面了。

 

1.10 重啓jenkins後需從新登錄

10.0.0.8:8080    #打開網頁

cat /var/lib/jenkins/secrets/initialAdminPassword

 

admin       #默認帳號

f72d71394e594007918aff6509a1ba73               #索取文件密碼

 

1.11 查看是否安裝好插件

這裏確認,已經安裝好了。

 

1.12 Jenkins配置文件說明

[root@oldboyedu-47 plugins]# rpm -ql jenkins       #查看Jenkins的配置文件路徑

/etc/init.d/jenkins            #啓動文件

/etc/logrotate.d/jenkins       #日誌分隔配置文件

/etc/sysconfig/jenkins         #Jenkins主配置文件

/usr/lib/jenkins              

/usr/lib/jenkins/jenkins.war   #war包存放目錄

/usr/sbin/rcjenkins            #命令

/var/cache/jenkins             #var包解壓目錄,jenkins網頁代碼目錄

/var/lib/jenkins               #Jenkins工做目錄 ***

/var/log/jenkins

 

1.13 配置併發執行任務數量

系統管理-系統設置

根據電腦配置來填寫,這個數量是要起進程數的,改爲5。

 

1.14 郵件配置

系統管理》系統設置

讓Jenkins用郵件的方式通知我,這裏填寫要發送郵件的郵箱

像全網備份同樣,填寫使用什麼服務器發送郵件,填寫smtp.163.com,還有用戶郵箱後綴以什麼爲結尾,還有smtp的用戶名和密碼,最下面還有一個發送郵件測試,前提是前面的配置都配置好了後才能夠,最後點擊保存,

 

重要提示:可能163郵箱有點問題,可能日後須要用到126的郵箱地址來作測試

 

1.15 新建一個任務

填寫一個項目名字,點擊第一個「構建一個自由風格的軟件項目」,最後點擊OK。

將GitLab的項目源地址複製

在Jenkins頁面下面找源碼管理-選擇Git-將GitLab的項目地址寫入框框裏,記得將地址改爲IP地址,由於沒有解析,填入進去以後會有紅色提示,提示須要密鑰。

 

這裏有一個原理圖

 

在Jenkins服務器操做:

[root@oldboyedu-47 plugins]# ssh-keygen            #生成密鑰

[root@oldboyedu-47 plugins]# cat /root/.ssh/id_rsa.pub    #打開密鑰將密鑰複製粘貼到Git密鑰管理那,添加一個公鑰,

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTK9DGLclX4wK7GbnRZvlIKEOUuHtHg7OyBM9UEkali45utx2M4S78gu7hDTsDCZu5wNzyCywkkEOubaB0HmB5PWOeDaXftozWity4C857Yqu2ESaJ2fdnTq1CX4GI+89xE4RyuhE6nTol75eXrb7aUfq0r+yioTAM5ADV/b+y7hxdLOVNtED1TnPQP61mpC7UH87Oc/UgCzVH50wJ5XgdLyrN1QAiVhArqnJN3/KrKf5OEdo8SLfDqCLVXJc28Hg2c6ObnljRdM8ZhGHwBPQRLifMFWj2K7G1JauRqs/m+fZRC0Ybf+p2NNYJ+E4RYe5j8RedHDdq4/A7OVvCL16z root@oldboyedu-47

 

GitLab網頁上操做:

由於GitLab改版了,功能不少出如今別的地方,因此要搜索這個Profile Settings,在點擊SSH Keys

 

將剛纔Jenkins服務器的SSH公鑰對放在裏面,點擊ADD添加。

 

Jenkins網頁上操做:

在GitLab上添加了Jenkins的公鑰,這時候想在Jenkins上訪問GitLab就須要作這步,點擊Add,點擊Jenkins,把私鑰放在個人Jenkins裏。

 

選擇SSH那一欄

 

填寫git,由於git運行用戶是git

 

這時候這個私鑰能夠選擇在本身的家目錄去讀取等等其餘方式,這裏我選擇了直接輸入密鑰的信息

 

Jenkins服務器上操做:

[root@oldboyedu-47 plugins]# cat /root/.ssh/id_rsa        #打開私鑰的信息,把裏面全部打印出來的信息全都要複製。

-----BEGIN RSA PRIVATE KEY-----

MIIEpQIBAAKCAQEA0yvQxi3JV+MCuxm50Wb5SChDlLh7R4OzsgTPVBJGpYuObrcd

jOEu/ILu4Q07AwmbucDc8gssJJBDrm2gdB5geT1jng2l37aM1orcuAvOe2KrthEm

idn3Z06tQl+BiPvPcROEcroROp06Je+Xl62+2lH6tK/soqEwDOQA1f2/su4cXSzl

TbRA9U5z0D+tZqQu1B/OznP1IAs1R+dMCeV4HS8qzdUAIlYQK6pyTd/yqyn+ThHa

PEi3w6gi1VyXNvB4NnOjm55Y0XTPGYRh8AT0ES4nzBVo9iuxtSWrkarP5vn2UQtG

G3/qdjTWCfhOEWHuY/EXnRw3auPwOzlbwi9eswIDAQABAoIBAENoYSRhyTu8w0pm

U+J8NGbMM4ZtvSx+5gWVc3kqvFJr0fOVkGFAIHeKdCZyyruVfZg18FFzL4wcYP51

EBsA91q8NehmAuT+qMZzXTGC006fmKBtqRen9EmN29CsG/VWLEm0KTtWGdnUBpPF

f2Zzl9CpCpZS8f6X5Xa38Wxdq6u5sekE4qeYuttYIFyzwgBWyzMezqKpz1Cgjsyj

nJjg2G8f0YRBoY+3f+fqDSgf1nTdZkKOzTysoPhh2Y1TrpgbaVldkElMe7FCpmaC

ddOR4wPnfH3bhU3ECsdgtHc9RjBmsaHG7LXoedjTqPuYvbBoGBb7HrF5vLvn42k7

woeVY8ECgYEA7hYaDO7KKDs81zgfD+wqVA5p7V+V2nzpgXQzltnPR55F0cos61YB

zJjVMFF0qnc8SXgNMo0bdxqs1YMdToR4Q68gYxuFBo42XpO1Xu4Hwz63cICrLu1G

W8H99JCLdPwt4AoPWdBl5otn1GNzKdPsLSRlJLS6LiwLy/HgOdOGyH0CgYEA4w9J

hkdHp+ZhKAm8MF8OH/Y+IaKmR1iiP3ZHaziJfulSeyFg79/lQPABvR0OMxj1shht

mlPqBr3lpKe+spM3SCW8RmNbVy9kIkn7so+NHcJgyENjI7LUAFihpa1mQ4xdcFYm

uO+zUxmHLxVqf3c/BkbZgvSdYiohq6n7f0jrmu8CgYEAqijDr5COjRhhUFQ85w1b

5z1x+YQCPuhdnvbk1CCRY1c8AUckuYF7wbVNUL42yopzXPLfQ8zT31kCQ4r0zCQj

LASi+hI2DcxgEVIyI0mt5J4TTuW28tAEJBpOnZcdBJwjUWb/N6qY2Z+ysnntWeyr

dEv5ubUtB0jVmYoiPlHul6UCgYEAl+UoKH4Sv41svV4V2L4eMt+GHPY0ClKO56l2

iZHe2Vm45cokkRPUx6ZHY33GfARciPGykKVGT5BFyeq1tbyqJMepteTNu/tmH1Ii

4QcLPjdEi3QZJE6DaF/ic3UWjmWeNIJNkTY5XoQbXTIUdoUNUmOfKu39QygwMiia

qEHd610CgYEAgHDY5kEuTHkcG6k+tB4I60ty1bvbyskf7cVk/FUVMl4oKrpBCbN3

YXY3UtKYwbn4a9/TGBSbNvAg0MgGCdlM9Bf4+cWZFJMRW/GgldtRYoTorFlwjE1I

yeqwxjFcSoMDBGrKqSoJjP6AxSRCF4iJ3azHydTWv+U1HgVNWOn1VZc=

-----END RSA PRIVATE KEY-----

 

Jenkins網頁上操做:

將Jenkins機器的密鑰放在裏面就行了。

 

最後點擊ADD

這時候會出現一個新的選項叫作,git,選擇他,這就是Git的關聯方法了。

 

找到下方的構建,而後選擇第二個Execute shell(執行命令)

填寫複製全部東西到/data/www目錄的命令,而後保存,這時候就完成了一個項目了。(這裏至關於Jenkins複製GitLab倉庫的文件到Jenkins工做目錄後要執行的權限

 

 

Jenkins服務器上操做:

[root@oldboyedu-47 ~]# mkdir /data/www –p     #建立目錄,要讓GitLab全部的東西都複製到Jenkins服務器上的/data/www目錄下

[root@oldboyedu-47 ~]# chown -R jenkins.jenkins /data/www     #jenkins的進程是jenkins用戶控制的,因此這裏也要改爲jenkins

 

jenkins會從gitLab里拉文件到jenkins服務器上的/var/lib/jenkins/workspace目錄下以項目名稱同名的「php-deploy」


Jenkins網頁上操做:

點擊Jenkins大圖標,回到主頁,會看到一個項目,這時候準備從GitLab裏啦代碼下來,在執行那個cp那個命令

 

GitLab網頁上操做:

由於要測試自動化同步,因此在GitLab這個倉庫裏建立一些新文件來測試,也能夠在GitLab這個服務器工做目錄當中去建立文件,這裏爲了快速,因此這裏在Git網頁裏按加號+來選擇New file添加新的文件做爲測試。

 

隨便寫一個文件名稱和內容

而後最後在下面點擊保存。

 

這裏是成功新建文件的結果,若是不建立的文件的話,是沒法啦文件的,在生產環境當中開發不是這樣去編輯文件的的,都是在工做目錄環境當中去寫文件的,這邊爲樂兒快速測試,因此這樣去作。

 

Jenkins網頁上操做:

在Jenkins網頁中點擊剛纔建立的項目,有個小鬧鐘相似於播放器同樣,點擊一下,會自動把咱們的東西啦到Jenkins裏部署複製(由於咱們只寫了cp,要想裝環境等得收集安裝環境的命令,相似於寫腳本。),也能夠點擊容許自動刷新,在「構建執行狀態」會有一個過程,能夠仔細看,完成後顯示空閒。

 

這是正在部署的狀態。

 

Jenkins服務器上操做:

[root@oldboyedu-47 php-deploy]# ls /var/lib/jenkins/workspace/php-deploy  #此時在GitLab新建的文件就會先拉到到這個Jenkins目錄下的項目目錄

123test  asdasdastest      #這是剛纔新建立的文件

 

[root@oldboyedu-47 php-deploy]# ls /data/www     #先將GitLab倉庫的文件拉到Jenkins的默認目錄,在執行部署的cp命令,將他拉到指定的目錄/data/www

123test  asdasdastest          #此時已經將默認目錄的東西拉到指定目錄了。

 

 

Jenkins的工做目錄: /var/lib/jenkins/workspace/php-deploy    #php-deploy是jenkins裏建立的項目名稱

部署指定的目錄: /data/www

 

 

功能小總結:

無論能夠執行cp,ssh,或者export安裝環境變量等命令均可以執行,能夠幫你一鍵搭建部署,只要有代碼,剩下就是拉到指定倉庫作指定的事情,像寫腳本同樣,指定路徑,執行環境初始化,在啓動服務等。

 

1.16 Jenkins平臺上查看GitLab導入數據到Jenkins工做目錄的(失敗或成功)的操做記錄

點擊成功的#號,或者失敗的#號

點擊Console output

原理就是在jenkins新建一個腳本,而後把命令在裏面操做,這個腳本在/tmp目錄下,執行完就本身刪除本身這個腳本。

 

失敗的也是一樣操做見解。

 

1.17 Jenkins自動部署命令說明

只要在jenkins工做平臺上的一個項目裏,在他的構建選項裏填入命令就行了,固然第一步有複製cp 文件到某個目錄,而後怎麼執行什麼環境變量,啓動服務等命令均可以,總結一點就是要準備好配置文件,再準備好啓動服務的命令。

 

1.18 配置Gitlab Push自動觸發jenkins構建(開發新建代碼,jenkins自動更新而且觸發部署命令)

步驟1、下載gitlab plugin

Jenkins>插件管理

下載並安裝gitlabplugin

 

步驟2、配置gitlab認證

路徑

 

Jenkins網頁上操做:

 

點擊Credentials-System-Global creadentials的按鈕

點擊Add多建立一個Git

選擇GitLab API token那個選項

 

GitLab網頁上操做:

 

搜索框裏搜索Profile settings後,在點擊Account

這有一個token,複製一下,粘貼到Jenkins的界面

 

Jenkins網頁上操做:

將剛纔的token粘貼到API tokne框框裏,而後填寫一個描述爲GITLAB,不用管,就這樣填寫,填寫完後,再點擊OK

 

 在到Jenkins裏的主頁裏點擊系統管理,

點擊系統管理-系統設置

 

找到Gitlab區塊的地方,而後第一個隨便取一個鏈接的名字,第二個URL填寫GitLab的IP地址,第三個直接點擊下拉框能夠看到咱們剛纔配置好的GitLab API tonke的選項。

 

故障:test connection測試時出現error錯誤。

/etc/gitlab     #GitLab服務器上打開這個網頁編輯

external_url 'http://10.0.0.7'     #修改oldboyedu爲GitLab倉庫的IP地址,不然不能解析

gitlab-ctl restart         #執行這個命令,重啓Git全部組件

gitlab-ctl reconfigure     #執行這個命令,對GitLab進行重配置而且從新啓動,主要是讓剛纔那個配置文件修改後生效。

最後刷新一下也

 

最後是使用ssh密鑰對的方式鏈接成功而且同步的,沒有用token的方式。

 

 

 

說明:簡單來說是在jenkins中對gitlab的倉庫設置一個token和倉庫地址,後向gitlab的倉庫設置了剛jenkins生成的token值,讓其倉庫和jenkins對接起來,原理是當用戶觸發push操做,就會自動合併到master分支上。

 

 

 

 

 

 

 

1.19 關於Jenkins部署代碼權限三種方案

1.19.1 方法一:修改jenkins進程用戶爲root

vim /etc/sysconfig/jenkins         #修改Jenkins的主配置文件

JENKINS_USER=」jenkins」           #在這裏能夠修改。

 

1.19.2 方法二:將代碼目錄用戶改成jenkins

mkdir /data/www –p

chown –r jenkins.jenkins /data/www

 

1.19.3 方法三:使用sudo受權

visudo

 

1.20 自動化構建腳本

#!/bin/sh

DATE=$(date +%Y-%m-%d-%H-%M-%S)

HOST="10.0.0.7"

CODE_DIR="/var/lib/jenkins/workspace/my-freestyle-job"

WEB_DIR="/var/www/"

 

GET_CODE(){

    echo git_get

}

 

TAR_CODE(){

    cd $CODE_DIR

    tar zcf /opt/web-${DATE}.tar.gz ./*

}

 

SCP_CODE_WEB(){

    scp /opt/web-${DATE}.tar.gz $HOST:${WEB_DIR}

}

 

TAR_XF(){

    ssh $HOST "cd $WEB_DIR && mkdir web-$DATE && rm -rf html && tar xf web-${DATE}.tar.gz -C web-$DATE"

 

}

 

DEPLOY(){

    ssh $HOST "cd $WEB_DIR && ln -s web-$DATE html"

}

 

main(){

    GET_CODE

    TAR_CODE

    SCP_CODE_WEB

    TAR_XF

    DEPLOY

}

main

相關文章
相關標籤/搜索