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="/data/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 ,此时说明代码拉取成功

 

 

 

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

  

  

  

 

  

  

 

  

  

 

  

 

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

posted @ 2020-03-17 22:07  一叶知秋~~  阅读(5103)  评论(2编辑  收藏  举报