Jenkins1

阅读: 评论:0

Jenkins1

Jenkins1

文章目录

    • 1. 安装jenkins
    • 2. Jenkins插件管理与汉化
    • 3. Jenkins与shell-git集成
    • 4. 发布代码的架构图
    • 5. 手动实现代码的发布
      • 5.1 搭建集群环境
      • 5.2 模拟开发提交代码
      • 5.3 Jenkins手动拉取代码
      • 5.4 web集群创建目录代码
      • 5.5 浏览器测试网站
    • 6. Jenkins实现半自动发布代码
    • 7. Jenkins实现全自动发布代码
    • 8. Jenkins基于tags方式发布代码
    • 9. Jenkins基于tags方式回退代码
    • 10. Jenkins基于tags方式防止重复构建

1. 安装jenkins

# 1. 安装java环境、安装jenkins
[root@jenkins ~]# yum install java -y  
[root@jenkins ~]# yum localinstall jenkins-2.176.arch.rpm -y  # 也可以使用rpm -ivh jenkins-2.176.arch.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    (C:Windowssystem32driversetchosts)# 3. 问题排错
(1)jenkins出现:Please wait while Jenkins is getting ready to work . 
将安装目录/var/lib/jenkinss下 l
修改为:.json
#然后重启jenkins (2)当第一次初始化jenkins,如果没有正常进入,然后需要登录密码时,默认的用户是 admin 、 密码是:
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
05c55ae33edc4a4c93232bff9964e06b(3)当进入Jenkins后,第一件事情就是修改密码:oldxu

访问后的页面操作

2. Jenkins插件管理与汉化

Jenkins插件管理

1.在jenkins页面进行安装
2.上传.hpi的文件进行安装
3.直接导入插件、重启Jenkins完成安装。直接准备好的插件放到这个目录下
#插件默认存储在 /var/lib/jenkins/plugins 
[root@jenkins ~]# cd jenkins/
[root@jenkins jenkins]# tar xf jenkins_plugins_
[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 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_f
upstream web {server 172.16.1.7:80;
server 172.16.1.8:80;
}server {listen 80;
server_name html.oldxu;location / {proxy_pass web;include proxy_params;
}
}# 2. 检查语法和重载服务[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl reload nginx

web集群配置:

[root@web01 ~]# cat /etc/nginx/conf.d/f
server {listen 80;
server_name html.oldxu;
root /web;location / {index index.html;
}
}
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/f syntax is ok
nginx: configuration file /etc/f test is successful
[root@web01 ~]# systemctl reload nginx

配置下windows的hosts劫持:

  10.0.0.5 html.oldxu

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 .git  # 2. 更换origin对应的仓库(换成提交的gitlab)
# 显示当前origin对应的仓库
[root@yum-rpm monitor]# git remote -v
origin	.git (fetch)
origin	.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). web-monitor/# for i in {7..8};do scp -rp  root@172.16.1.$i:/opt;done

5.4 web集群创建目录代码

  #登陆到web集群服务器进行如下操作:[root@web02 ~]# cd /opt/[root@web02 opt]# tar xf [root@web02 opt]# rm -f /web && ln -s /opt/web-monitor /web    [root@web02 opt]# ll /weblrwxrwxrwx 1 root root 16 8月  17 11:08 /web -> /opt/web-monitor

5.5 浏览器测试网站

浏览器输入html.oldxu

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}. ./*#调用scp推送代码压缩包,然后调用ssh进行发布
for host in ${Web_Server}
doscp -rp ${Web_Dir}/${Web_Name}. root@${host}:${Web_Dir}ssh root@${host} "cd ${Web_Dir} && mkdir -p ${Web_Name} && tar xf ${Web_Name}. -C ${Web_Name} && chown -inx ${Web_Name} && rm -f ${Web_Name}. && # 删除软连接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的项目呢?:8080/project/freestyle-web-monitorgitlab通知给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- Date改为WebN​ame=web−monitor−{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}. ./*# 调用scp推送代码压缩包,然后调用ssh进行发布for host in ${Web_Server}
doscp -rp ${Web_Dir}/${Web_Name}. root@${host}:${Web_Dir}ssh root@${host} "cd ${Web_Dir} && mkdir -p ${Web_Name} && tar xf ${Web_Name}. -C ${Web_Name} && rm -f ${Web_Name}. && 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}
dossh root@${host} "if [ -d ${Web_Dir}/web-monitor-*_${git_version} ];then        rm -f /web              ln -s ${Web_Dir}/web-monitor-*_${git_version} /webecho "web-monitor 项目回退至 ${git_version} 版本成功"elseecho "版本输出错误,退出"exit 1fi"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} ];thenecho "你已经发布过 ${git_version}"echo "它的 CommitID为 ${GIT_COMMIT}"echo "无需重复发布" && exit 1
fi# 进入对应的项目进行打包操作
cd ${WORKSPACE} && tar -zcf ${Web_Dir}/${Web_Name}. ./*# 调用scp推送代码压缩包,然后调用ssh进行发布for host in ${Web_Server}
doscp -rp ${Web_Dir}/${Web_Name}. root@${host}:${Web_Dir}ssh root@${host} "cd ${Web_Dir} && mkdir -p ${Web_Name} && tar xf ${Web_Name}. -C ${Web_Name} && rm -f ${Web_Name}. && rm -f /web && ln -s ${Web_Dir}/${Web_Name} /web"
done

开始进行测试:

本文发布于:2024-01-28 03:13:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063828334376.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23