• 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 ,此时说明代码拉取成功

      

      

      

     

      

     

      

      

      

     

      

      

     

      

      

     

      

     

      

      

      

      

     

      

      

  • 相关阅读:
    python之socket编程
    python之异常处理
    面向对象进阶
    openstack的网络配置
    VLAN,GRE,VXLAN
    三节点搭建openstack-Mitaka版本
    矩阵转换
    判断区域相交的方法
    Centos 6.5 Multipath 初始配置
    CentOS开机自动运行程序的脚本
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/12387377.html
Copyright © 2020-2023  润新知