Jenkins1

1. 安装jenkins

# 1. 安装java环境、安装jenkins
[root@jenkins ~]# yum install java -y  
[root@jenkins ~]# yum localinstall jenkins-2.176.1-1.1.noarch.rpm -y  # 也可以使用rpm -ivh jenkins-2.176.1-1.1.noarch.rpm进行安装 
[root@jenkins ~]# rpm -ql jenkins # 查看jenkins的配置文件
/etc/init.d/jenkins #启停脚本
/etc/logrotate.d/jenkins #日志切割
/etc/sysconfig/jenkins #主要配置文件
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war #jenkins的核心包(后面的升级就是替换该核心包即可)
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins #jenkins的工作目录
/var/log/jenkins #jenkins的日志路径

# 2. 加入开机启动、启动jenkins 
[root@jenkins ~]# systemctl enable jenkins
[root@jenkins ~]# systemctl start jenkins
小技巧: 如果想通过域名访问,请配置hosts劫持   Windows  |  MacOS  
10.0.0.120 jenkins.oldxu.com    (C:\Windows\system32\drivers\etc\hosts)

# 3. 问题排错
(1)jenkins出现:Please wait while Jenkins is getting ready to work . 
将安装目录/var/lib/jenkinss下 hudson.model.UpdateCenter.xml
修改为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#然后重启jenkins 

(2)当第一次初始化jenkins,如果没有正常进入,然后需要登录密码时,默认的用户是 admin 、 密码是:
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
05c55ae33edc4a4c93232bff9964e06b

(3)当进入Jenkins后,第一件事情就是修改密码:oldxu.com

访问后的页面操作
在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Enx8wJp-1629041925397)(B0A4525C8EC74A44B6035ACCCE4D352E)]

2. Jenkins插件管理与汉化

Jenkins插件管理

1.在jenkins页面进行安装
2.上传.hpi的文件进行安装
3.直接导入插件、重启Jenkins完成安装。直接准备好的插件放到这个目录下
#插件默认存储在 /var/lib/jenkins/plugins 
[root@jenkins ~]# cd jenkins/
[root@jenkins jenkins]# tar xf jenkins_plugins_new.tar.gz
[root@jenkins jenkins]# mv plugins/* /var/lib/jenkins/plugins/
[root@jenkins jenkins]# chown -R jenkins.jenkins /var/lib/jenkins/plugins/
[root@jenkins jenkins]# systemctl restart jenkins

jenkins汉化

 注意:有的人是导入插件后就全中了,那么不用进行如下操作
1.先将jenkins调整为英文 Mange jenkins --> configure SYstem -->Locale -->zh_US
2.重启jenkins http://IP:8080/restart
3.在将jenkins调整为中文语言,然后刷新即可。 Mange jenkins --> configure SYstem -->Locale --> zh_CN

3. Jenkins与shell-git集成

Jenkins集成shell

集成Shell、创建一个自由软件风格的项目--然后在构建里面调用Shell (输入Shell指令即可。)

在这里插入图片描述

Jenkins集成gitlab:

1.jenkins需要安装对应的git插件(提前已经部署好插件了)
2.创建项目,选择源代码,填写gitlab项目的地址 (记住,需要让jenkins能解析该域名)
3.jenkins服务器生成秘钥对
    3.1 将公钥放入gitlab服务器对应的用户下(得是对该项目有权限的用户)
    3.2 将私钥放入jenkins,因为jenkins并不知道你的私钥在那里。所以需要添加一个凭据(告诉jenkins私钥是啥。)
    (把Jenkins的公钥放到gitlab上不能实现解密,因为jenkins并不知道你的私钥放在哪里,系统知道私钥在哪)

具体操作如下如所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 发布代码的架构图

在这里插入图片描述

1.先去搭建集群环境:
2.模拟开发提交代码到gitlab
3.手动拉取代码。并完成代码的更新 (手动)

5. 手动实现代码的发布

5.1 搭建集群环境

lb:10.0.0.5
web01:10.0.0.7
web02:10.0.0.8
gitlab: 10.0.0.200
jenkins: 10.0.0.201
yum-rpm:10.0.0.100 (模拟开发写代码,提交到远程仓库)

负载均衡配置:

# 1. 进行配置文件配置  

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_html.oldxu.com.conf
upstream web {

server 172.16.1.7:80;
server 172.16.1.8:80;
}

server {

listen 80;
server_name html.oldxu.com;

location / {
    proxy_pass http://web;
    include proxy_params;
}
}

# 2. 检查语法和重载服务

[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl reload nginx

web集群配置:

[root@web01 ~]# cat /etc/nginx/conf.d/html.oldxu.com.conf
server {

listen 80;
server_name html.oldxu.com;
root /web;

location / {
    index index.html;
}
}
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl reload nginx

配置下windows的hosts劫持:

  10.0.0.5 html.oldxu.com

5.2 模拟开发提交代码

(1)登陆gitlab,创建一个仓库

(2)模拟开发提交本地仓库的代码到远程仓库

# 首先配置ssh免密配置:
[root@yum-rpm ~]# ssh-keygen
# 把公钥配置配置到gitlab的页面上,如下图所示
[root@yum-rpm ~]# cat .ssh/id_rsa.pub

在这里插入图片描述

# 1. 在码云上下载开源代码
[root@yum-rpm ~]# git clone https://gitee.com/kangjie1209/monitor.git  

# 2. 更换origin对应的仓库(换成提交的gitlab)
# 显示当前origin对应的仓库
[root@yum-rpm monitor]# git remote -v
origin	https://gitee.com/kangjie1209/monitor.git (fetch)
origin	https://gitee.com/kangjie1209/monitor.git (push)

# 删除当前origin对应的仓库
[root@yum-rpm monitor]# git remote remove origin

# 添加新的ssh协议的仓库
[root@yum-rpm monitor]# git remote add origin git@10.0.0.200:ops/web-moniter.git

# 显示当前的origin对应的仓库,确认是否添加成功(添加这个origin的目录提交代码到那个gitlab仓库)
[root@yum-rpm monitor]# git remote -v 
origin	git@10.0.0.200:ops/web-moniter.git (fetch)
origin	git@10.0.0.200:ops/web-moniter.git (push)

# 3. 把项目的文件提交到在暂存区、本地仓库,推送到gitlab远程仓库
[root@yum-rpm monitor]# git add .
[root@yum-rpm monitor]# git commit -m "v1"
[root@yum-rpm monitor]# git push origin master

5.3 Jenkins手动拉取代码

 #先配置免密登陆:(因为Jenkins服务器要推送到web集群)
  [root@jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
  [root@jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8

  #手动发布代码
  # git clone git@10.0.0.200:ops/web-moniter.git
  # tar czf web-monitor-$(date +%F-%H-%M).tar.gz web-monitor/
  # for i in {7..8};do scp -rp web-monitor-2020-08-17-11-07.tar.gz root@172.16.1.$i:/opt;done

5.4 web集群创建目录代码

  #登陆到web集群服务器进行如下操作:
  [root@web02 ~]# cd /opt/
  [root@web02 opt]# tar xf web-monitor-2020-08-17-11-07.tar.gz
  [root@web02 opt]# rm -f /web && ln -s /opt/web-monitor /web    

  [root@web02 opt]# ll /web
  lrwxrwxrwx 1 root root 16 8月  17 11:08 /web -> /opt/web-monitor

5.5 浏览器测试网站

浏览器输入html.oldxu.com
在这里插入图片描述

6. Jenkins实现半自动发布代码

1.创建jenkins freestyle项目

2.配置好对应gitlab的仓库地址 (源码管理–>web-monitor项目地址)

在这里插入图片描述

3.编写对应的Shell脚本,发布到web集群中

[root@jenkins ~]# cat /scripts/html_deploy.sh
#!/usr/bin/bash
# 描述: 用来发布代码至web集群服务器

# 提示1:免密操作已经完成了(Jenkins推公钥到web集群上)
# 提示2:Jenkins会把代码从gitlab拉下来

#定义变量
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}
Web_Dir=/opt
# 注意:如果Jenkins没有内网网卡,要使用外网网卡10.0.0.7 10.0.0.8
Web_Server="172.16.1.7 172.16.1.8"

#进入对应的项目目录进行打包操作
cd ${WORKSPACE} && \
tar czf ${Web_Dir}/${Web_Name}.tar.gz ./*

#调用scp推送代码压缩包,然后调用ssh进行发布
for host in ${Web_Server}
do
    scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@${host}:${Web_Dir}
    ssh root@${host} "cd ${Web_Dir} && \
              mkdir -p ${Web_Name} && \
              tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \
              chown -R nginx.nginx ${Web_Name} && \
              rm -f ${Web_Name}.tar.gz && \
              # 删除软连接
              rm -f /web && \
              ln -s ${Web_Dir}/${Web_Name} /web"
done

[root@jenkins scripts]# chmod +x /scripts/html_deploy.sh

4.注意:将jenkins的运行身份修改为root,否则无法完成打包操作(JENKINS_USER=“root”)

# 因为Jenkins是由Jenkins用户启动的,所以没有权限,这时需要到/etc/sysconfig/jenkins中修改权限为root

[root@jenkins ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"

[root@jenkins ~]# systemctl restart jenkins

5. 修改标题,实现半自动发布代码

这里所谓的半自动发布代码,如果开发者修改代码,开发者提交代码至远程仓库之后,还需要在Jenkins中重新构建代码。如果是开发者提交完代码到远程仓库之后,Jenkins自动构建,这是全自动构建。

开始修改原代码,然后提交代码之后,实现半自动发布代码
在这里插入图片描述

7. Jenkins实现全自动发布代码

开发一提交代码,合并到master | push到master 就触发 jenkins构建任务?

gitlab一旦发生push操作则通知jenkins指定的项目完成自动构建:
    gitlab通知给哪个jenkins的项目呢?http://10.0.0.201:8080/project/freestyle-web-monitor
    gitlab通知给jenkins不需要认证吗?768c448b67c4356dce2b06af160c7547

gitlab怎么配置通知呢?

指定的项目发生push操作才通知jenkins构建,而不是所有的项目发生变化都触发构建?
1.点击对应的项目
2.用户设置中-->webhooks 配置 通知的URL、以及相应验证的Token

# 这个看情况而定,版本不同,有可能不用配下面的内容
3.出现错误:Urlis blocked: Requests to the local network are not allowed
3.1:管理中心-->用户设置--->网络-->外发请求-->勾选(允许Webhook和服务对本地网络的请求)

具体操作如下图所示:
在这里插入图片描述

真实测试:

# 进入index.html,到43行修改内容为董坤Aotu管理平台
[root@yum-rpm monitor]# vim index.html 
[root@yum-rpm monitor]# git add .
[root@yum-rpm monitor]# git commit -m "Auto"
[root@yum-rpm monitor]# git push origin master
# 进入Jenkins的页面,看项目是否构建成功

具体操作如下图所示:
在这里插入图片描述
在这里插入图片描述

8. Jenkins基于tags方式发布代码

使用tags的原因是:回退版本比较简单

用户传递参数(tags版本),脚本支持你的传参才可以。

具体操作如下图所示:

在这里插入图片描述

真实开始测试:

# 还是修改标题名称
[root@yum-rpm monitor]# vim index.html
[root@yum-rpm monitor]# git add .
[root@yum-rpm monitor]# git commit -m "v1.1"
[root@yum-rpm monitor]# git push origin master [root@yum-rpm monitor]# git tag -a v1.1 -m "这是AI平台1.1版"    

# 这里仅仅是一个标签而已
[root@yum-rpm monitor]# git push origin --tags

在这里插入图片描述

小总结:
(1)在Jenkins页面开始构建,会出现很多版本,选择版本之后,开始构建, 会把版本传递给设置中的源码管理,然后Jenkins就会拉取项目代码,然后在执行脚本。
(2)在脚本中修改的不多把Web_Name=web-monitor- D a t e 改 为 W e b N a m e = w e b − m o n i t o r − {Date}改为Web_Name=web-monitor- DateWebName=webmonitor{Date}_${git_version},作用是以识别项目的标签(标签设置的版本号)

#!/bin/bash
# 描述:用来发布代码到web集群服务器

# 提示1:免密操作已经完成了(Jenkins推公钥到web集群上)
# 提示2:Jenkins会把代码从gitlab拉下来

# 定义变量
Date=$(date +%F-%H-%M)

# 多添加了一个变量${git_version},是从Jenkins传进来的,作用标识是哪一个版本,仅此而已
Web_Name=web-monitor-${Date}_${git_version}
Web_Dir=/opt
Web_Server="10.0.0.7 10.0.0.8"

# 进入对应的项目进行打包操作
cd ${WORKSPACE} && tar -zcf ${Web_Dir}/${Web_Name}.tar.gz ./*

# 调用scp推送代码压缩包,然后调用ssh进行发布

for host in ${Web_Server}
do
        scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@${host}:${Web_Dir}
        ssh root@${host} "cd ${Web_Dir} && \
                        mkdir -p ${Web_Name} && \
                        tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \
                        rm -f ${Web_Name}.tar.gz && \
                        rm -f /web && \
                        ln -s ${Web_Dir}/${Web_Name} /web"
done

9. Jenkins基于tags方式回退代码

版本回退,如果让开发在上传一次代码,比较麻烦。 重复发布代码会导致web服务器上的下的项目非常乱,还有就是web服务器上的项目保留最近七天,其他的全部干掉(在Jenkins上用脚本可以解决)。

正确解决方式:

版本回退可以直接在web上进行操作,因为在web中已经存在v1.1和v1.2,如果从v1.2回退到v1.1,可以把/web软连接删掉,给v1.2版本重新建立软连接/web。实现了版本回退。

(1)在Jenkins中写入脚本

#!/usr/bin/bash

# 回退脚本
# 1. 登录目标集群服务
# 2. 删除软连接、重建软连接

# 定义变量
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}_${git_version}
Web_Dir=/opt
Web_Server="10.0.0.7 10.0.0.8"

for host in ${Web_Server}
do
        ssh root@${host} "if [ -d ${Web_Dir}/web-monitor-*_${git_version} ];then        
                                rm -f /web              
                                ln -s ${Web_Dir}/web-monitor-*_${git_version} /web
                                echo "web-monitor 项目回退至 ${git_version} 版本成功"
                          else
                                echo "版本输出错误,退出"
                                exit 1
                          fi"

done

(2)在Jenkins页面中进行配置

在这里插入图片描述

小提示:

(1)在上面的脚本中exit 1 就是没有找到,则会退出,状态码为1,小球会变红。如果exit的话,状态码为0,虽然没有找到对应的版本,但是小球没有变红,这时不知道回退成功没有,所以exit 1更严谨。

在这里插入图片描述

10. Jenkins基于tags方式防止重复构建

如果重复部署v1.1版本是可以成功的,但是在版本回退的时候会产生问题。

如果是部署的话,我们先去检测一下该tag是否部署过,如果部署过则拒绝部署即可。(下面有一小块核心代码 [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ] 判断现在部署的tags和之前发不过去的tag是否相同,如果相同,则不能部署)

tag就是GIT_COMMIT的别名而已。

#!/bin/bash
# 描述:用来发布代码到web集群服务器
# by:dongkun

# 提示1:免密操作已经完成了(Jenkins推公钥到web集群上)
# 提示2:Jenkins会把代码从gitlab拉下来

# 定义变量
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}_${git_version}
Web_Dir=/opt
Web_Server="10.0.0.7 10.0.0.8"

# 已经成功部署过的tags,无法部署第二次。
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
        echo "你已经发布过 ${git_version}"
        echo "它的 CommitID为 ${GIT_COMMIT}"
        echo "无需重复发布" && exit 1
fi

# 进入对应的项目进行打包操作
cd ${WORKSPACE} && tar -zcf ${Web_Dir}/${Web_Name}.tar.gz ./*

# 调用scp推送代码压缩包,然后调用ssh进行发布

for host in ${Web_Server}
do
        scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@${host}:${Web_Dir}
        ssh root@${host} "cd ${Web_Dir} && \
                        mkdir -p ${Web_Name} && \
                        tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \
                        rm -f ${Web_Name}.tar.gz && \
                        rm -f /web && \
                        ln -s ${Web_Dir}/${Web_Name} /web"
done

开始进行测试:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值