美文网首页
Jenkins部署及使用

Jenkins部署及使用

作者: 小熊渣渣 | 来源:发表于2020-11-29 20:31 被阅读0次

    官网 jenkins.io
    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

    1.安装准备

    装备1台服务器 关闭selinux和防火墙
    内存2G 50G+硬盘
    jenkins 10.0.0.101

    2.安装JDK运行环境和jenkins服务

    上传JDK和jenkins rpm安装包,使用rpm ‐ivh进行安装,安装完JDK运行java测试是否安装成功
    rpm ‐ivh jdk‐8u181‐linux‐x64.rpm
    rpm ‐ivh jenkins‐2.99‐1.1.noarch.rp

    3.配置jenkins

    启动用户修改为root
    JENKINS_USER="root"
    [root@CentOS7 ~]# systemctl start jenkins
    [root@CentOS7 ~]# systemctl enable jenkins

    ps:启动Jenkins时,默认启动方式在配置文件中是Jenkins普通用户身份,本次测试环境在内网使用,不使用普通用户,则需要改为root用户。
    [root@Jenkins ~]rpm -ql jenkins
    /etc/init.d/jenkins
    /etc/logrotate.d/jenkins
    /etc/sysconfig/jenkins
    /usr/lib/jenkins
    /usr/lib/jenkins/jenkins.war
    /usr/sbin/rcjenkins
    /var/cache/jenkins
    /var/lib/jenkins
    /var/log/jenkins
    [root@Jenkins ~]vim /etc/sysconfig/jenkins 
    [root@Jenkins ~]netstat -tnulp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1145/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1236/master         
    tcp6       0      0 :::8080                 :::*                    LISTEN      16717/java          
    tcp6       0      0 :::22                   :::*                    LISTEN      1145/sshd           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1236/master         
    [root@Jenkins ~]systemctl enable jenkins
    jenkins.service is not a native service, redirecting to /sbin/chkconfig.
    Executing /sbin/chkconfig jenkins on
    

    访问页面进行配置
    http://10.0.0.101:8080


    图片.png 图片.png 重新配置一下密码,保存后重新登录(密码:123) 图片.png
    图片.png
    图片.png

    4.插件安装(跳过安装插件,直接上传插件到目录)、修改登录密码及使用

    1.自动安装可选插件
    2.手动下载插件上传安装
    3.插件放入插件目录
    [root@Jenkins ~]cd /var/lib/jenkins/
    [root@Jenkins jenkins]ll #jobs为每次构建后构建的结果目录,plugins为插件目录
    总用量 36
    -rw-r--r-- 1 root root 1644 11月 28 21:02 config.xml
    -rw-r--r-- 1 root root  156 11月 28 20:50 hudson.model.UpdateCenter.xml
    -rw------- 1 root root 1712 11月 28 20:50 identity.key.enc
    -rw-r--r-- 1 root root    7 11月 28 21:02 jenkins.install.InstallUtil.lastExecVersion
    -rw-r--r-- 1 root root    7 11月 28 21:02 jenkins.install.UpgradeWizard.state
    -rw-r--r-- 1 root root  171 11月 28 20:50 jenkins.telemetry.Correlator.xml
    drwxr-xr-x 2 root root    6 11月 28 20:50 jobs
    drwxr-xr-x 3 root root   19 11月 28 20:50 logs
    -rw-r--r-- 1 root root  907 11月 28 20:50 nodeMonitors.xml
    drwxr-xr-x 2 root root    6 11月 28 20:50 nodes
    drwxr-xr-x 2 root root    6 11月 28 20:50 plugins
    -rw-r--r-- 1 root root   64 11月 28 20:50 secret.key
    -rw-r--r-- 1 root root    0 11月 28 20:50 secret.key.not-so-secret
    drwx------ 4 root root 4096 11月 28 20:54 secrets
    drwxr-xr-x 2 root root   67 11月 28 20:56 updates
    drwxr-xr-x 2 root root   24 11月 28 20:50 userContent
    drwxr-xr-x 3 root root   55 11月 28 20:50 users
    

    上传插件包解压到plugins下执行重启 systemctl restart jenkins

    4.jenkins主要的目录

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

    5.创建一个自由风格的项目freestyle‐job
    图片.png
    丢失旧的构建 图片.png 执行一条shell命令、查看运行的当前路径,构建后的产物存储在/var/lib/jenkins/workspace/ 图片.png
    6.jenkins获取git源码,这里我们由码云导入一个HTML页面的监控平台到gitlab仓库 图片.png

    jenkins端配置从git获取代码,由于我们dev用户是配置在jenkins上,所以无需认证即可下载代码

    7.执行立即构建获取到代码 图片.png

    此时代码被拉到Jenkins服务器本地中

    [root@Jenkins ~]cd /var/lib/jenkins/workspace/freestyle_job
    [root@Jenkins freestyle_job]ll
    总用量 1364
    -rw-r--r--  1 root root  1208 11月 29 14:52 404.html
    -rw-r--r--  1 root root 27249 11月 29 14:52 alerts.html
    drwxr-xr-x  5 root root    64 11月 29 14:52 assets
    -rw-r--r--  1 root root 34972 11月 29 14:52 buttons.html
    -rw-r--r--  1 root root 38472 11月 29 14:52 calendar.html
    -rw-r--r--  1 root root 36402 11月 29 14:52 charts.html
    -rw-r--r--  1 root root 87824 11月 29 14:52 components.html
    -rw-r--r--  1 root root 68329 11月 29 14:52 content-widgets.html
    drwxr-xr-x  2 root root  4096 11月 29 14:52 css
    -rw-r--r--  1 root root 24976 11月 29 14:52 deviceManager.html
    -rw-r--r--  1 root root 34930 11月 29 14:52 dianfei.html
    -rw-r--r--  1 root root 33003 11月 29 14:52 efficiencyAnalysis.html
    -rw-r--r--  1 root root 27158 11月 29 14:52 energy_consumption.html
    -rw-r--r--  1 root root 25419 11月 29 14:52 file-manager.html
    drwxr-xr-x  6 root root   240 11月 29 14:52 fonts
    -rw-r--r--  1 root root 62928 11月 29 14:52 form-components.html
    -rw-r--r--  1 root root 33233 11月 29 14:52 form-elements.html
    -rw-r--r--  1 root root 40152 11月 29 14:52 form-examples.html
    -rw-r--r--  1 root root 48175 11月 29 14:52 form-validation.html
    -rw-r--r--  1 root root 78059 11月 29 14:52 images-icons.html
    drwxr-xr-x 16 root root  4096 11月 29 14:52 img
    -rw-r--r--  1 root root 68654 11月 29 14:52 index.html
    drwxr-xr-x  8 root root  4096 11月 29 14:52 js
    -rw-r--r--  1 root root 56647 11月 29 14:52 keyInfo.html
      w-r--r--  1 root root 25676 11月 29 14:52 labels.html
    -rw-r--r--  1 root root 18041 11月 29 14:52 LICENSE
    -rw-r--r--  1 root root 38366 11月 29 14:52 list-view.html
    -rw-r--r--  1 root root  4155 11月 29 14:52 login.html
    drwxr-xr-x  2 root root    35 11月 29 14:52 media
    -rw-r--r--  1 root root 32897 11月 29 14:52 media.html
    -rw-r--r--  1 root root 40070 11月 29 14:52 messages.html
    -rw-r--r--  1 root root   335 11月 29 14:52 mstp_105_SuperAdmin.iml
    -rw-r--r--  1 root root 29295 11月 29 14:52 mstp_map.html
    -rw-r--r--  1 root root 41855 11月 29 14:52 other-components.html
    -rw-r--r--  1 root root 51611 11月 29 14:52 profile-page.html
    -rw-r--r--  1 root root   335 11月 29 14:52 QHME.iml
    -rw-r--r--  1 root root   843 11月 29 14:52 readme.md
    -rw-r--r--  1 root root 33594 11月 29 14:52 real-time.html
    -rw-r--r--  1 root root 58365 11月 29 14:52 sa.html
    -rw-r--r--  1 root root 24713 11月 29 14:52 tables.html
    -rw-r--r--  1 root root 41609 11月 29 14:52 typography.html
    -rw-r--r--  1 root root 22720 11月 29 14:52 userMng.html
    
    8.写一个脚本把从git仓库里获取的代码上传到web服务器站点目录下
    [root@Jenkins ~]mkdir /server/scripts -p
    [root@Jenkins ~]cd /server/scripts
    [root@Jenkins scripts]vim deploy.sh
    #!/bin/sh
    DATE=$(date +%Y-%m-%d-%H-%M-%S)
    CODE_DIR="/var/lib/jenkins/workspace/freestyle_job"
    WEB_DIR="/usr/share/nginx/"
    
    get_code_tar(){
            cd $CODE_DIR && tar zcf /opt/web-${DATE}.tar.gz ./*
    }
    
    scp_code_web(){
            scp /opt/web-${DATE}.tar.gz 10.0.0.20:$WEB_DIR
    }
    
    code_tarxf(){
            ssh 10.0.0.20 "cd $WEB_DIR &&mkdir web-${DATE} && tar xf web-${DATE}.tar.gz -C web-${DATE}"
    
    }
    ln_html(){
             ssh 10.0.0.20 "cd $WEB_DIR && rm -rf html && ln -s web-${DATE} html && rm -rf web-${DATE}.tar.gz"
    }
    
    main(){
    
            get_code_tar;
            scp_code_web;
            code_tarxf;
            ln_html;
    }
    main
    
    9.使用jenkins调用部署脚本(此处写脚本全路径脚本名称)测试
    图片.png

    执行脚本需要Jenkins10.0.0.101远程连接web10.0.0.20,故需要与web服务器做免密码认证

    [root@Jenkins ~]ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.20
    
    在Jenkins中立即构建,显示执行成功 图片.png
    此时访问10.0.0.20web服务器,页面访问如下,即Jenkins成功将代码推送到web服务器中。 图片.png
    10.配置自动触发构建、需要设置安全令牌Secret token 图片.png 图片.png
    11.克隆代码到master上更改代码后进行推送测试是否自动触发
    [root@Gitlab ~]git clone git@10.0.0.100:test/monitor.git
    [root@Gitlab ~]ll
    总用量 4
    drwxr-xr-x 3 root root   34 11月 28 15:03 git_data
    drwxr-xr-x 9 root root 4096 11月 29 20:51 monitor
    [root@Gitlab ~]cd monitor/
    [root@Gitlab monitor]vim index.html
    [root@Gitlab monitor]git add .
    [root@Gitlab monitor]git commit -m "modify index.html v1.1"
    [root@Gitlab monitor]git push -u origin master
    
    克隆并更改代码进行推送,刷新web发现代码更改信息已成功,即自动化构建配置完成。 图片.png
    12.配置jenkins返回构建状态到gitlab
    系统管理‐系统设置选项下 图片.png
    进行认证配置进入gitlab点击用户设置找到访问令牌Access Tokens 图片.png 图片.png 图片.png 图片.png 下一步设置项目中的执行后操作。然后进行构建测试返回结果 图片.png 查看测试结果 图片.png

    5.jenkins集成微信

    工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员

    ①. 注册微信企业公众号
    搜索微信公众平台->注册->选择企业微信 图片.png 选择完成后把下面信息进行完善->使用自己微信扫描二维码进行管理后-点注册 图片.png 图片.png
    注册成功登陆后点击应用管理->创建应用 图片.png 上一张图片->填写应用名称-可见范围->创建应用-保存好agentld和secret写入py脚本 图片.png
    更改py脚本内对应的内容-touser为账号名称
    [root@Jenkins freestyle_job]cd /server/scripts/
    [root@Jenkins scripts]# ll
    总用量 4
    -rw-r--r-- 1 root root 611 11月 29 20:11 deploy.sh
    [root@Jenkins scripts]rz -E
    rz waiting to receive.
    [root@Jenkins scripts]ll
    总用量 8
    -rw-r--r-- 1 root root  611 11月 29 20:11 deploy.sh
    -rw-r--r-- 1 root root 2008 11月 17 18:49 jenkins_notify.py
    [root@Jenkins scripts]# vim jenkins_notify.py
    
    图片.png Corpid为企业ID 这里只把corpid写入对应的位置 图片.png
    配置jenkins

    1.由于jenkins没有官网的插件来完成此功能,所以我们只能用网络上一些开源的插件(已集合在plugins)
    github下载代码
    https://github.com/daniel-beck/changelog-environment-plugin
    解压到某个目录-》进入目录执行以下操作
    cd 到 changelog-environment-plugin-master 下,执行
    mvn verify
    时间较长,会在changelog-environment-plugin-master/target/下有个changelog-environment.hpi文件,上传到
    jenkins即可使用
    2.配置jenkins
    jenkins进入到项目中->构建环境多了Add Changelog Information to Environment->点击选择

    图片.png 图片.png
    构建后操作选择Post build task (需要安装插件,之前已经安装好了)如果没有此选择请安装Hudson Post build task 插件,SCM_CHANGELOG须安装changelog插件,上传py脚本->jenkins服务器上安装python requests模块
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum -y install python-pip
    pip2.7 install requests
    图片.png
    echo {SCM_CHANGELOG} > /tmp/{JOB_NAME}_change.log
    python /server/scripts/jenkins_notify.py {BUILD_URL} /tmp/{JOB_NAME}_change.log {JOB_NAME} rm -fv /tmp/{JOB_NAME}_change.log
    [root@Jenkins scripts]# yum -y install python-pi
    [root@Jenkins scripts]# pip2.7 install requests
    
    图片.png

    6.参数化构建,通过tag传递参数达到发布和代码回滚的操作

    图片.png

    接下来测试一下设置的变量,执行的界面自动变成参数化执行


    图片.png
    图片.png

    注: 接下来安装插件、在可选插件中搜索Git Parameter 直接安装即可,已安装则忽略次步骤
    进入到项目把前面的参数化去掉重新选择使用git parameter


    图片.png
    下一步把git拉取代码的master更改为$git_version变量 图片.png
    添加两个参数选项变量deploy和rollback选项
    图片.png

    下一步修改脚本的传参

    [root@Jenkins scripts]# cat deploy.sh

    !/bin/sh

    DATE=git_version CODE_DIR=WORKSPACE
    WEB_DIR="/usr/share/nginx/"

    get_code_tar(){
    cd CODE_DIR && tar zcf /opt/web-{DATE}.tar.gz ./*
    }

    scp_code_web(){
    scp /opt/web-{DATE}.tar.gz 10.0.0.20:WEB_DIR
    }

    code_tarxf(){
    ssh 10.0.0.20 "cd WEB_DIR &&mkdir web-{DATE} && tar xf web-{DATE}.tar.gz -C web-{DATE}"

    }
    ln_html(){
    ssh 10.0.0.20 "cd WEB_DIR && rm -rf html && ln -s web-{DATE} html && rm -rf web-${DATE}.tar.gz"
    }

    main(){
    get_code_tar;
    scp_code_web;
    code_tarxf;
    ln_html;
    }
    if [ deploy_env == "deploy" ];then main elif [deploy_env == "rollback" ];then
    ln_html
    fi
    当重复执行构建后会生成多个相同版本的文件,利用jenkins变量值解决重复性构建问题
    jenkins变量

    1. GIT_COMMIT 当前版本提交产生的哈希唯一值
    2. GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
      使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断
    if [ $deploy_env == "deploy" ];then
          if [ $GIT_COMMIT == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
               echo "$git_version  此版本已经提交 禁止重复构建"
          else
            main
          fi
    elif
    [ $deploy_env == "rollback" ];then
           ln_html
    fi
    

    相关文章

      网友评论

          本文标题:Jenkins部署及使用

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