Jenkins之一----實現Jenkins在Gitlab上免秘鑰拉取代碼,並傳遞到后端服務器上


 實戰:實現Jenkins在Gitlab免秘鑰登錄拉取代碼並傳遞到后端服務器上

框架圖:

環境准備:

角色 IP地址 備注
Gitlab 192.168.7.100 存放代碼
Jenkins 192.168.7.101 拉取代碼
Tomcat-app1 192.168.7.104 提供服務
tomcat-app2 192.168.7.105 提供服務
haproxy 192.168.7.102/192.168.7.103 反向代理及高可用
keepalived 192.168.7.102/192.168.7.103(VIP:192.168.7.248) 反向代理及高可用

安裝並配置tomcat服務

 官方下載JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(1)從官網下載tomcat二進制安裝包 http://tomcat.apache.org/

下載路徑:https://archive.apache.org/dist/tomcat/

 1、在兩台后端服務器上安裝JDK包

1、下載JDK包,使用8版本的即可,並將下載的包解壓,創建軟鏈接

[root@tomcat-web1 src]# tar xvf jdk-8u212-linux-x64.tar.gz 
[root@tomcat-web1 src]# ln -sv /usr/local/src/jdk1.8.0_212/   /usr/local/jdk
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’

2、設置JDK環境變量,並生效

[root@tomcat-web1 src]# vim /etc/profile # 配置環境變量
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/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

[root@tomcat-web1 src]# . /etc/profile # 生效環境變量

3、對JDK的可執行程序創建軟鏈接

[root@tomcat-web1 src]# ln -sv /usr/local/jdk/bin/java  /usr/bin/
‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

4、查看此時解壓后的JDK版本

[root@tomcat-web1 src]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

2、在兩台后端服務器上安裝tomcat服務

1、在官網上下載tomcat軟件、解壓、並創建用戶賬號

[root@tomcat-web1 apps]#mkdir /apps
[root@tomcat-web1 apps]# tar xvf apache-tomcat-8.5.42.tar.gz  #解壓tomcat包
[root@tomcat-web1 apps]# ln -sv /apps/apache-tomcat-8.5.42 /apps/tomcat  # 創建tomcat軟鏈接,方便后期升級tomcat版本。
‘/apps/tomcat’ -> ‘/apps/apache-tomcat-8.5.42’
[root@tomcat-web1 apps]# useradd -m www -u 2020 -s /bin/bash  # 創建一個www賬號,指定用戶的家目錄,以及指定shell類型,使其可以登錄

2、創建兩個存放app和web的目錄

[root@tomcat-web1 home]# mkdir /data/tomcat/tomcat_appdir -p
[root@tomcat-web1 home]# mkdir /data/tomcat/tomcat_webdir/myapp -p

3、修改tomcat配置文件

# vim /apps/tomcat/conf/server.xml
 <Host name="localhost"  appBase="/apps/tomcat/tomcat_webdir" # 指定訪問網頁的路徑

4、在之前創建的myapp目錄下創建一個測試頁面,用來測試訪問網站是否正常,第一台后端服務器訪問的IP地址:

# vim /data/tomcat/tomcat_webdir/myapp/index.html
192.168.7.104 web1

第二台后端服務器訪問的網頁測試

# vim /data/tomcat/tomcat_webdir/myapp/index.html
192.168.7.105 web2

5、配置完tomcat服務之后,修改tomcat的屬主與數組權限,啟動tomcat服務

[root@tomcat-web1 ~]# chown www.www /data/tomcat/ /apps/tomcat/ /apps/apache-tomcat-8.5.42 -R  # 將tomcat相關的目錄屬主和屬組權限進行修改

[root@tomcat-web1 ~]# su - www  
[www@tomcat-web1 ~]$ /apps/tomcat/bin/catalina.sh  start
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@tomcat-web1 ~]# su - www -c /apps/tomcat/bin/startup.sh # 或者直接在root權限下切換至www用戶啟動tomcat服務

6、此時可以看到tomcat服務是以www用戶啟動的服務

7、查看訪問網頁地址

 

 3、在兩台主機上安裝keepalived和haproxy

1、在兩台主機分別安裝keepalived和haproxy,keepalived做高可用(主從VIP漂移),haproxy做反向代理,分擔后端服務器的壓力。

# yum install keepalived  haproxy  -y

2、修改主keepalived配置文件,添加VIP地址,/etc/keepalived/keepalived.conf  ,監聽的端口號是:5000

注意要刪除vrrp_strict選項,此選項需要嚴格遵守VRRP協議,不允許狀況,不刪除會導致web頁面無法訪問

1、沒有VIP地址

2、單播鄰居

3、在VRRP版本2中有IPv6地址

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.7.248 dev eth0 label eth0:1
    }
}

3、修改從keepalived配置文件/etc/keepalived/keepalived.conf,監聽的端口號是5000

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state SLAVE
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.7.248 dev eth0 label eth0:1
    }
}

4、修改兩個haproxy主機的配置文件/etc/haproxy/haproxy.cfg,監聽VIP地址,將訪問的VIP地址調度到后端的服務器上

listen myapp
    mode http  # 修改為http模式就會進行輪詢調度,采用七層代理,如果使用tcp調度,只會一直調度一個服務器,采用四層代理,只有一個haproxy代理連接數達到上限之后,才會調度到另一個服務器上
    bind 192.168.7.248:80
    server 192.168.7.104 192.168.7.104:8080 check
    server 192.168.7.105 192.168.7.105:8080 check

5、啟動haproxy和keepalived服務

# systemctl start keepalived  haproxy

注意,如果haproxy啟動不起來,就需要修改/etc/sysctl.conf配置文件

[root@node1 src]# sysctl -a | grep bind
net.ipv4.ip_nonlocal_bind = 0  # 查詢到此內核參數開關為0時,需要在/etc/sysctl.conf配置文件中改為1

修改/etc/sysctl.conf配置文件

# /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1

# sysctl -p  #內核參數修改完之后,將配置文件生效

6、配置好keepalived服務,需要將主的停掉,看VIP地址是否能夠漂移到從服務器上,如果可以,就啟動主從的keepalived服務,查看此時的haproxy和keepalived監聽的端口號,keepalived監聽的是5000端口。

 7、此時可以訪問網頁測試效果,后端的兩個服務器可以進行輪詢調度訪問,此時haproxy和keepalived配置完成。

 

 4、安裝配置jenkins

Jenkins官方下載地址:https://jenkins.io/zh/ 

 官方下載JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1、下載JDK包,解壓並創建軟鏈接、修改環境變量

[root@jenkins src]# tar xvf jdk-8u212-linux-x64.tar.gz  #解壓下載的jdk包
[root@jenkins src]# ln -sv /usr/local/src/jdk1.8.0_212/  /usr/local/jdk  #創建軟鏈接
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’
[root@jenkins src]# ln -sv /usr/local/jdk/bin/java /usr/bin  # JAVA命令的軟鏈接
‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

定義JDK環境變量,並使環境變量生效

#  vim  /etc/profile
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/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

#  . /etc/profile

2、查看此時JAVA版本,如果能查看到JAVA版本號,說明安裝配置沒問題

[root@jenkins src]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

3、修改jenkins配置文件:/etc/sysconfig/jenkins

JENKINS_USER="root"   #由於jenkins賬號可能存在權限過低問題,使用root用戶啟動
#添加啟動參數
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -server -Xms2g -Xmx2g -Xss512k -Xmn1g \  #最大內存是2G,最小內存也是2G,如果主機內存夠大,也可以再調整大點
-XX:CMSInitiatingOccupancyFraction=65 \
-XX:+UseFastAccessorMethods \
-XX:+AggressiveOpts -XX:+UseBiasedLocking \
-XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 \
-XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 \
-XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 \
-XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC \
-XX:+CMSParallelRemarkEnabled -Djava.awt.headless=true \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname="192.168.7.101""  #添加本地的IP地址

4、啟動jenkins服務,並查看監聽的端口號,此時的端口號是:8080

[root@jenkins default]# systemctl start jenkins

1、登錄jenkins網頁並配置

1、在網頁上進行訪問,訪問本地的IP地址並添加端口號:192.168.7.101:8080

 2、查看此時的目錄密碼,用來進行登錄jenkins,進行初始化安裝jenkins

[root@jenkins default]# cat /var/lib/jenkins/secrets/initialAdminPassword
437752021fe446709c748be22c653427

3、登錄網頁后,然后選擇推薦的安裝

 4、默認會安裝以下的包

5、設置管理員賬號和密碼

 6、訪問的URL路徑不要動,直接下一步即可

 7、登錄jenkins管理員賬號

 8、登錄Jenkins后,去首頁安裝指定的gitlab和Blue Ocean插件,點擊左下角的直接安裝

9、安裝gitlab之后,選擇安裝完成后進行重啟jenkins服務

10、安裝Blue Ocean插件

 

 2、在jenkins網頁上創建用戶並授權

1、創建一個testuser用戶賬號,先點擊jenkins頭像--->系統管理--->管理用戶---->創建用戶

 

 2、創建一個testuser用戶賬號

 3、登陸管理員賬號jenkinsadmin,安裝role base插件對普通用戶(testuser)授權

 4、在jenkins--->系統管理--->全局安全配置---->選擇Role-Base Strategy認證

 5、在系統管理--->Manage and Assign Roles 創建一個角色

 6、添加角色並分配角色權限,應用並保存。

7、分配角色,將新建的testuser和創建的Linux-role角色進行關聯

8、登陸testuser賬號,此時的testuser賬號就沒有系統管理權限,只能執行被授過權的job,但是沒有了管理員的權限。

 3、配置管理員郵箱

1、在系統管理--->系統設置,修改郵箱地址

2、配置發送郵箱地址,使用qq郵箱的smtp加密協議發送到公司內部郵箱

在jenkins基於ssh key拉取代碼

1、在jenkins主機上生成公私鑰對

[root@jenkins rules.d]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:SMNVEeqraNSfjX1ce4WFCb9VrrDA8V1zgS371fT5yg8 root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
|        ..+o  o..|
|     . . .. .o o=|
|      + .. o +o*B|
|     . +  o o.=.B|
|     .. S  . o.*o|
|    . .  .  . =.o|
|   .   ..= . oEo.|
|    .. .+ o o +..|
|   .. .    .   o.|
+----[SHA256]-----+

查看此時生成的私鑰文件信息,將私鑰信息復制到jenkins網頁上

[root@jenkins rules.d]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAr1DvqvhzdBGV0zObuxCg/sseK5VWLwyS3O55ncw+0BvUFuU8
AD+UDugI0LFILzkz1T2oUgEx2bNYuMyu1ZjhnPEz+ebqNulONBVA84HTI4Xwm5Hb
JZoUIaumCi9wI+kxD5aKY3E1sCnRDwE4uM18XSpwDSZYTHR155sVw08XPOC4uX0u
9GgUEuy7OSuLhvMnISOpBhGNCt/aT23Dq2aBhM0UeaGMUIWRylspSJ9mWIYds36M
6byinNgfIom0FpbGq2p88zgKGE8LJ8KxwGCz5GRlnbAACsAml4iOjQQfTvnFTKSi
gN6nEU47LUci2yW3NxKllmUGY3CddHEToww0/QIDAQABAoIBAGXladd6XkhI7Eb8
CPiZ+qj8z4VPX+8qpLWKWd9QVfXJJuVDyTLvwRNE49LAJ49i9PBszMcU8K9yoQ+P
z9JP8Fmyi54lC15tDcoRzFV70IcmEymohbH+MtM7G99xoQEOSTihK8AOjcDdHShW
cmxe6niP8N6DufB+BAVgSy7gakYz9Ek36P8AdMwz9Tn7icvKThGWk0QAvoSMtTEY
UQgnk3fnzrZOWrmF+JR3HlMGMc9SIVykXfv6NUI29Arfmwtb5sngfrx6riC7vof6
GeHMgb297oYSA4kuMC9WlHOdmk0vD4BUMtaCrYMCm20DA4ysnGnl0cKuP+CipPRy
+dWJ92ECgYEA3ViZaKql7NU/ZF5qbLsMAlXVViGAHSvenljLNSPKf2GsErMR98T2
k6VceFTEvsE8aag93DYeK1WofHuEAMMh3abZSxPnq2xXZPOldRTm+Gw6T1WfY5Mt
5cHpiLldB3GQ881wsIWjmdTTQKO4Cy05494WtSPlWPt0tHfjARGb7DUCgYEAysN9
D1fecvBiKHmbiFtpDM1Dmu28MpbgUVfrzipSQ50+OX8gJmm/n5ZehF28a0uxfnKQ
25rFZ4PcDDWsKRgJ9kQTiiLVoaXfXYpsrVt2YAFL9uwnsWF390kovTAHbdFlpDyb
6gF79eWuXom0L+/Ij6xHjoJYoEZNh5UFtp/07qkCgYANm43K1nre5XlBNWC7kIA7
gIVeBy82G+VSvMi5WprvW9TVTXb0UYKLLyZRK3zw8TZClJpA+H7AUULLbFiAJ37k
foZrTCz45+8zgJsSaJeOfDDVgcELwReYQWSXCDZE5+Fua5na8ExPf7sBBU+iOESP
0q54sl0+LC9PjPNCtI9uZQKBgQDC4i37Z0spUh4mJOv2nVVUtp159XHjddxYkpbU
axzyW9oIzUULZqyFKLPjqWyF/BS3IkpUqGd/3N7M5XF5dd9tUXUuWdjXK2SKtZdK
8BPQpq5qwAROmw4BIdIENHuPc6mrt41r1s1cRMvZlaUYRfGRFdcZA/NG6Qtvey4o
n4l9MQKBgQCO3NqgLCeqeq5r/lu5TTzOxaD+tyxJZWJDGMowE/MVqXY88pA66hvy
oMHmdnRKnMmakWmv+/YYfuhYDaqYV+Wj88J9mWPUscimEQylDTmcZCeJyR7slOfT
OgslT9H+LtNX77B8vaYsICl0g8InaA/EDU5Pqawfph2lKEzrgVQ0ng==
-----END RSA PRIVATE KEY-----

2、在jenkins首頁--->憑據--->jenkins---->全局憑據---->添加憑據上添加一個jenkins服務器的證書憑證

 3、創建linux-jobs項目(jenkins首頁---->NEW任務  來創建新的項目)

4、創建一個測試的執行shell命令

 5、選擇剛創建的linux-jobs項目,配置git項目地址和用戶,添加完成的證書沒有報錯表示認證通過

6、然后將gitlab服務里創建的linux_gitlab組里的web1項目的URL進行克隆,web1項目的創建,詳情見gitlab之一,需要對gitlab配置免密拉取gitlab上面的文件,詳情見此鏈接:https://www.cnblogs.com/struggle-1216/p/12386887.html

 7、將gitlab服務器web1項目的URL地址復制后,粘貼到jenkins服務的源碼位置,確保jenkins安裝了git命令。

 8、點擊立即構建,顯示藍色說明克隆正常。

 

 9、點擊控制台,查看具體的執行信息,可以看到此時克隆的文件在    /var/lib/jenkins/workspace/linux-jobs此目錄下

 

10、在jenkins主機上查看克隆的結果,此時可以看到,克隆的文件果然在此目錄下:/var/lib/jenkins/workspace/linux-jobs/

[root@jenkins ~]# cat  /var/lib/jenkins/workspace/linux-jobs/index.html 
linux  web v1
linux web  v2[root@jenkins ~]# 

在gitlab主機上獲取的代碼復制到后端服務器上

 1、將jenkins主機的公鑰復制到后端服務器上www賬號上,實現遠程登錄www時,免秘鑰登錄

[root@jenkins ~]# ssh-copy-id www@192.168.7.104 # 將jenkins公鑰復制到后端服務器上
[root@jenkins ~]# ssh-copy-id www@192.168.7.105
[root@jenkins ~]# ssh www@192.168.7.104  # 測試可以免秘鑰遠程登錄后端服務器的www賬號
Last login: Fri Mar 6 08:41:26 2020 from 192.168.7.101
[www@tomcat-web1 ~]$
[root@jenkins ~]# ssh www@192.168.7.105 # 測試遠程登錄后端服務器
Last login: Wed Mar 4 09:12:31 2020

2、此時沖jenkins主機傳遞到后端服務器的公鑰文件在/home/www/.ssh/authorized_keys文件內,我們也可以在后端服務器切換至www賬號上創建一個/home/www/.ssh/authorized_keys文件,將jenkins主機的公鑰直接復制到后端服務器的authorized_keys文件中,並將權限改為600:chmod 600 authorized_keys,兩種方法都可以。

[root@tomcat-web2 ~]# cat  /home/www/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvUO+q+HN0EZXTM5u7EKD+yx4rlVYvDJLc7nmdzD7QG9QW5TwAP5QO6AjQsUgvOTPVPahSATHZs1i4zK7VmOGc8TP55uo26U40FUDzgdMjhfCbkdslmhQhq6YKL3Aj6TEPlopjcTWwKdEPATi4zXxdKnANJlhMdHXnmxXDTxc84Li5fS70aBQS7Ls5K4uG8ychI6kGEY0K39pPbcOrZoGEzRR5oYxQhZHKWylIn2ZYhh2zfozpvKKc2B8iibQWlsaranzzOAoYTwsnwrHAYLPkZGWdsAAKwCaXiI6NBB9O+cVMpKKA3qcRTjstRyLbJbc3EqWWZQZjcJ10cROjDDT9 root@jenkins

3、在jenkins網頁上添加執行shell的命令,進行自動化在gitlab主機上拉取代碼,並將代碼直接復制到后端服務器上,/data/tomcat/tomcat_webdir/myapp目錄下是存放代碼位置,/data/tomcat/tomcat_appdir目錄下是存放壓縮文件位置。

cd /var/lib/jenkins/workspace/linux-jobs
tar cf code.tar.gz index.html
scp code.tar.gz  www@192.168.7.104:/data/tomcat/tomcat_appdir/ 
scp code.tar.gz  www@192.168.7.105:/data/tomcat/tomcat_appdir/  
ssh www@192.168.7.104  "/apps/tomcat/bin/shutdown.sh && rm -rf /data/tomcat/tomcat_webdir/myapp/*  && cd /data/tomcat/tomcat_appdir/ && tar xf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/" # 其中的/data/tomcat/tomcat_webdir/myapp目錄下是存放代碼位置
ssh www@192.168.7.105  "/apps/tomcat/bin/shutdown.sh && rm -rf /data/tomcat/tomcat_webdir/myapp/*  && cd /data/tomcat/tomcat_appdir/ && tar xf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"

ssh www@192.168.7.104  "/apps/tomcat/bin/startup.sh"
ssh www@192.168.7.105  "/apps/tomcat/bin/startup.sh"

4、對添加的shell腳本進行立即構建

5、可以詳細的查看構建執行的結果,最后的腳本執行成功會顯示SUCCESS

6、最后訪問keepalived配置VIP地址192.168.7.248:/myapp ,此時說明代碼拉取成功

 

 

 

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

  

  

  

 

  

  

 

  

  

 

  

 

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM