美文网首页
14、Jenkins部署

14、Jenkins部署

作者: 一个反派人物 | 来源:发表于2021-02-02 12:59 被阅读0次

    1 简介

    Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

    持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。

    1.1 Jenkins 持续集成流程图

    2 Jenkins安装

    2.1 Jenkins主程序安装

    sudo wget -O /etc/yum.repos.d/jenkins.repo \
        https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    sudo yum upgrade
    sudo yum install jenkins java-1.8.0-openjdk-devel
    sudo systemctl daemon-reload
    

    启动Jenkins

    systemctl start jenkins
    

    3 Jenkins重要目录

    /etc/sysconfig/jenkins:jenkins配置文件,"端口"、"JENKINS_HOME"等都可以在这里配置
    /usr/lib/jenkins:jenkins安装目录,WAR包会放在这里
    /var/lib/jenkins:默认的JENKINS_HOME
    /var/lib/jenkins/plugins:Jenkins插件目录
    /var/log/jenkins/jenkins.log:Jenkins的日志文件

    4 Jenkins持续集成配置


    目标,完成开发到代码上线的自动集成:

    1. gitlab作为dev的代码仓库进行项目代码管理,每次dev将代码push到master分支,或由其他分支merge到master分支。
    2. gitlab与jenkins联动,每次gitlab的master发生push或merge操作,gitlab向jenkins发送请求消息。jenkins从gitlab拉取项目文件,并将项目文件推送到前端web站点,成功后向gitlab返回成功消息。

    4.1 首次登录

    访问URLhttp://IPaddr:8080/,首次登录提示到/var/lib/jenkins/secrets/initialAdminPassword文件取得密码,输入密码后来到初始化页面。
    在初始化页面,如果没有安装插件,可以安装推荐的插件。
    安装完插件后,来到欢迎页面,可使用admin账户继续。


    来到jenkins页面后,首先给admin用户更改密码

    4.2 安装插件

    4.2.1 在Jenkins页面安装


    可进行搜索并安装


    4.2.2 手动安装

    在官网下载插件包,解压缩到/var/lib/jenkins/plugins目录下。
    之后重启jenkins

    systemctl restart jenkins
    

    4.3 配置freestyle项目

    每次创建一个项目都会生成/var/lib/jenkins/workspace/项目名称的目录

    4.3.1 项目创建


    4.3.2 配置丢弃旧的构建

    4.3.3 jenkins从git拉取项目,并向web站点推送

    4.3.3.1 配置Git源码管理

    在项目中配置git仓库地址,本例使用SSH链接。
    建议使用自定义的用户秘钥,因为默认jenkins使用jenkins用户进行连接。



    先用相应的用户生成公私钥,将公钥填写到Git服务器。然后在Jenkins处填写私钥,下图是以root用户为例进行填写。


    4.3.3.2 配置shell推送脚本

    项目从gitlab拉取的文件在/var/lib/jenkins/workspace/freestyle-job目录下,使用脚本将文件打包上传到web服务器。

    脚本文件/server/scripts/depoly.sh

    #bin/bash
    #项目目录
    SDIR="/var/lib/jenkins/workspace/freestyle-job"
    #web服务器地址
    IP="10.0.0.7"
    #时间信息
    TIME=`date +%F-%H-%M-%S`
    #web服务器目录
    DDIR="/html"
    
    #将项目文件打包
    cd $SDIR && tar -zcf "/tmp/dzp_$TIME.tar.gz" * &> /dev/null
    #将打包文件推送到web服务器
    scp "/tmp/dzp_$TIME.tar.gz"  root@$IP:$DDIR 
    #ssh到web服务器站点目录,将压缩包解压
    ssh root@$IP "cd $DDIR && mkdir dzp_$TIME && tar xf dzp_$TIME.tar.gz -C dzp_$TIME"
    #web服务器删除www目录
    ssh root@$IP "cd $DDIR && rm -rf www"
    #web服务器做站点目录www的软链接
    ssh root@$IP "cd $DDIR && ln -s dzp_$TIME www"
    #web服务器删除压缩包
    ssh root@$IP "cd $DDIR && rm -f dzp_$TIME.tar.gz"
    #jenkins服务器删除生成的临时文件
    rm -f /tmp/dzp_$TIME.tar.gz
    

    项目配置构建时执行shell命令



    之后手工点立即构建,完成从Gitlab的项目文件拉取,并用shell脚本推送到目标服务器


    4.3.4 gitlab与jenkins联动,实现jenkins自动拉取构建

    4.3.4.1 jenkins部分

    在jenkins的项目中配置构建触发器,打开Gitlab扩展,记住URL部分用于后续在Gitlab中配置。


    选择高级部分
    1. 配置允许的branche,只允许master分支的通知
    2. 生成Secret token,用于后续在Gitlab中配置

    4.3.4.2 gitlab部分

    如果gitlab和jenkins在同一局域网下,需要先配置允许向局域网推送请求



    在gitlab项目中配置webhook




    添加后,进行test测试

    返回HTTP200证明配置成功


    4.3.5 Jenkins向Gitlab返回结果

    4.3.5.1 Gitlab生成Access Token

    记住生成的Access Token给后续的jenkins连接作为凭据



    4.3.5.2 Jenkins配置Gitlab连接



    连接凭据配置,token里填入之前gitlab上生成的Access Token



    配置后进行连接测试,Success表示成功

    配置项目中的构建后操作,进入特定项目的配置页


    4.3.5.3 返回结果测试

    手动点击立即构建



    在gitlab上查看测试结果,有jenkins返回结果的项目会出现对号。


    5 Jenkins的ssh连接问题

    Jenkins程序默认使用jenkins用户去进行ssh连接,所以当需要做ssh免密的时候,需要用jenkins用户生成公私钥,并进行拷贝。

    jenkins用户的home目录是/var/lib/jenkins,默认shell是/bin/false

    jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/false
    

    使用jenkins用户生成公私钥,并拷贝

    #使用bash shell登录jenkins
    su -s /bin/bash jenkins
    #目前是jenkins用户,生成并拷贝公钥给目标服务器
    ssh-keygen -t rsa
    ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7
    

    相关文章

      网友评论

          本文标题:14、Jenkins部署

          本文链接:https://www.haomeiwen.com/subject/xkwozktx.html