Jenkins 集成FreeStyle 实践

👔1.Jenkins实现Gitlab集成

1.Jenkins为什么要集成Gitlab

因为我们需要依托jenkins将gitlab上的项目获取至本地,为后续网站的的代码发布工作做好准备。

2.Jenkins如何集成Gitlab

由于jenkins只是一个调度平台,所有需要安装与gitlab相关的插件即可完成集成。

3.Jenkins与Gitlab集成思路

1.开发提交代码至Gitlab
2.jenkins安装gitlab所需插件
3.jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。

4.Jenkins与Gitlab集成实践

在这里插入图片描述

1.开发人员提交代码至Gitlab

为了方便,我们使用的是root身份, 正常情况应该使用普通身份, 但要对项目有权限;

1) 准备一个gitlab仓库web-monitor
登陆gitlab网站创建一个新的项目

在这里插入图片描述
在这里插入图片描述

2) 通过Windows提交代码
2.1 windows客户端进行本地仓库与gitlab仓库的对接

在这里插入图片描述

2.2 将准备好的代码放入到方便实验的路径下

在这里插入图片描述

2.3 git-bash操作

1.首先身份验证(根据我们创建项目给予的提示进行操作)

git config --global user.name "Administrator"
git config --global user.email "admin@example.com"

在这里插入图片描述

2.当我们进入到monitor目录下发现自动切换到master,说明此时已经有连接到远端的仓库
我们要将旧的远端仓库删除,添加我们新创建的项目的远端仓库

查看远端仓库
git remote -v 

在这里插入图片描述

移除远端仓库
git remote remove origin

在这里插入图片描述
3.通过ssh协议免密的方式添加新项目monitor的远端仓库
3.1 git-bash(windows)生产公钥对

ssh-keygen

3.2 放置在gitlab网站上,从而达到免密效果,系统会自动找到相对应的私钥与公钥进行认证
在这里插入图片描述

2.4.添加远程仓库的远程地址
git remote add origin git@gitlab.cry.com:dev/web-monitor.git

在这里插入图片描述

2.5 本地Windows通过git-bash软件,上传web_monitor的代码到远端gitlab仓库
git add .
git commit -m "web_monitor"
git push origin master 
2.6 查看gitlab网页上传的代码(成功)

在这里插入图片描述

2.jenkins安装gitlab所需插件 安装插件的方法

插件名称插件作用
Credentials Plugin允许在Jenkins中存储认证的凭据
Git Client Plugin允许Jenkins使用Git
Git Plugin允许Jenkins集成Git
Gitlab Plugin允许Gitlab触发Jenkins构建并在Gitlab中显示
GitLab Hook允许 gitlab 自动触发 jenkins 构建项目
Gitlab Authentication plugingitlab 身份验证插件

3.jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。

3.1 创建freestyle项目

在这里插入图片描述

3.2 配置freestyle项目

在这里插入图片描述

报错1:jenkins与gitlab秘钥验证失败

1.jenkins生成公钥对

ssh-keygen

2 jenkins将公钥推送到gitlab服务器对应的用户;( 用户必须得对项目有拉取权限;)

[root@jenkins ~]# cat ~/.ssh/id_rsa.pub 

在这里插入图片描述

3 .告诉jenkins私钥是什么,这样才可以解密; Credentials

 cat ~/.ssh/id_rsa

在这里插入图片描述
在这里插入图片描述

报错2: jenkins无法访问gitlab的域名,所以要配置域名解析;
[root@jenkins ~]# echo "10.0.0.110 gitlab.cry.com" >> /etc/hosts

在这里插入图片描述

4.立即构建,测试jenkins抓取gitlab中存储的代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
jenkins默认存放路径/var/lib/jenkins/workspace/
在这里插入图片描述

👔2.Jenkins实现手动发布

在这里插入图片描述

1.搭建Nginx+web_cluster集群

对外提供html.cry.com站点( 一般公司都Ansible运行好了)

1.配置负载均衡(5)

1.配置
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_html.cry.com.conf
upstream web {
	server 172.16.1.7:80;
	server 172.16.1.8:80;	
}

server {
	listen 80;
	server_name html.cry.com;

	location / {
		proxy_pass http://web;
		proxy_set_header Host $http_host;
	}
}
2.检测
nginx -t
3.重启
systemctl restart nginx

2.配置web节点(7.8)

1.配置
[root@web01 conf.d]# cat /etc/nginx/conf.d/html.cry.com.conf 
server {
	listen 80;
	server_name html.cry.com;
	root /code/web_monitor;

	location / {
		index index.html;
	}
}
2.检测
nginx -t
3.重启
systemctl restart nginx

3.配置本地劫持,进行访问

在这里插入图片描述

因为站点目录下还没有部署代码,所以报404错误,但是网站架构搭建好了
在这里插入图片描述

2.手动拉取代码

2.1 先克隆项目

[root@jenkins ~]# git clone git@gitlab.cry.com:dev/web-monitor.git

在这里插入图片描述

2.2 将代码打包

cd web-monitor
tar czf /opt/web_monitor_$(date +%F_%H).tar.gz ./*

在这里插入图片描述

3.手动部署代码

将jenkins打包好的代码部署到两台web节点上,通过scp的方式

3.1 免密操作

ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8

3.2 通过scp发送到web集群节点

scp /opt/web_monitor_$(date +%F_%H).tar.gz root@172.16.1.7:/opt
scp /opt/web_monitor_$(date +%F_%H).tar.gz root@172.16.1.8:/opt

3.3 通过ssh登录到目标主机,解压,创建软连接


for i in 7 8 
	do
		ssh root@172.16.1.$i "cd /opt && \
		mkdir -p web_monitor_$(date +%F_%H) && \
		tar xf web_monitor_$(date +%F_%H).tar.gz -C web_monitor_$(date +%F_%H)
		rm -f /opt/web_monitor_$(date +%F_%H).tar.gz && \
		rm -f /code/web_monitor && \
		ln -s /opt/web_monitor_$(date +%F_%H) /code/web_monitor"
	done

3.4 查看结果,成功手动部署了代码

做软连接对应应用的代码,如果有代码更新或者回退只需要重新做软连接指向应用的代码
在这里插入图片描述
在这里插入图片描述

👔3.Jenkins实现自动发布

3.1 自动发布项目架构图

在这里插入图片描述

3.2 自动发布项目实现思路

1.手动搭建nginx集群架构
2.开发提交代码至gitlab、手动拉取代码,并推送至web服务器组
3.将手动操作编写至Shell脚本,由Jenkins调取,并推送至web服务器组

3.3 编写上线脚本,将代码推送至Web服务器组。

1.修改项目配置

在这里插入图片描述

在这里插入图片描述

2.脚本内容

[root@jenkins ~]# cat  /scripts/html_deploy.sh
#!/usr/bin/bash

Date=$(date +%F-%H)
Pkg_Name=web_monitor_${Date}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"

tar_code () {
  #1.进入到代码的目录下($WORKSPACE)
  #2.打包存放至本地jenkins服务器的/opt
  cd $WORKSPACE && \
  tar czf ${Web_Dir}/${Pkg_Name}.tar.gz ./*
}


scp_code() {
  #3.使用scp将代码包分发至web集群
  #4.通过ssh命令登录web集群主机,执行目录创建,解压,软件连接等操作
  for i in ${Web_Server}
  do
    scp -rp ${Web_Dir}/${Pkg_Name}.tar.gz root@${i}:${Web_Dir}
    ssh root@${i} "cd ${Web_Dir} && \
                       mkdir ${Pkg_Name} -p && \
                       tar xf ${Pkg_Name}.tar.gz -C ${Pkg_Name} && \
                       rm -f ${Web_Dir}/${Pkg_Name}.tar.gz && \
                       rm -f /code/web && \
                       ln -s ${Web_Dir}/${Pkg_Name} /code/web_monitor"
  done
}

deploy (){
    tar_code
    scp_code
}

    deploy

3.修改权限

[root@jenkins ~]# vim /etc/sysconfig/jenkins 
JENKINS_USER="root"
[root@jenkins ~]# systemctl restart jenkins 
查看jenkins日志
[root@jenkins ~]#tail -f /var/log/jenkins/jenkins.log

4.立即构建,自动发布

在这里插入图片描述
在这里插入图片描述

3.4 自动更新代码

如何实现全自动,开发人员提交了代码,然后自动的发布

配置Jenkins

引进触发器概念(hook钩子)
1.gitlab如果监控到push的操作通知Jenkins的地址http://jenkins.cry.com:8080/project/freestyle-web-monitor
2.gitlab通过Jenkins设置的令牌进行访问7beb318ad0999129b328f82dfb22f0b3

在这里插入图片描述
在这里插入图片描述

配置gitlab

在配置gitlab前,我们知道gitlab会通知我们指定的Jenkins路径下,所以要保证路径中的域名能够被访问到,但是我们这里使用的是假域名,所以需要配置本地hosts解析

echo "10.0.0.120 jenkins.cry.com " >> /etc/hosts

接下来先配置网络可以访问本地网络
在这里插入图片描述
在配置gitlab与Jenkins的触发器设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述
这边Jenkins的历史记录上显示的是gitlab推送过来的。
在这里插入图片描述

👔4.Jenkins实现版本发布

1.为什么要让项目支持tag版本方式上线?

由于之前上线方式是直接获取最新代码,那么会造成后期回退变的困难。
那如果采用tag方式,比如第一次上线v1.1、第二次上线v1.2、如果上线v1.2出现问题,那么我们可以快速回退至上一个版本v1.1。

2.实现tag版本上线方式思路

1.开发如果需要发布新版本,必须将当前的版本打上一个标签。
2.jenkins需要让其脚本支持传参,比如用户传递v1.1则拉取项目的v1.1标签

3.jenkins部署tag版本实操

0.安装Git Parameter插件

1.首先我们基于之前monitor项目进行克隆一个新的项目

在这里插入图片描述

2.配置项目

在这里插入图片描述

3.修改脚本

[root@jenkins scripts]# cat html_deploy_tags.sh 
#!/usr/bin/bash

Date=$(date +%F-%H-%M)
Pkg_Name=web_monitor_${Date}_${git_version}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"

tar_code () {
  #1.进入到代码的目录下($WORKSPACE)
  #2.打包存放至本地jenkins服务器的/opt
  cd $WORKSPACE && \
  tar czf ${Web_Dir}/${Pkg_Name}.tar.gz ./*
}


scp_code() {
  #3.使用scp将代码包分发至web集群
  #4.通过ssh命令登录web集群主机,执行目录创建,解压,软件连接等操作
  for i in ${Web_Server}
  do
    scp -rp ${Web_Dir}/${Pkg_Name}.tar.gz root@${i}:${Web_Dir}
    ssh root@${i} "cd ${Web_Dir} && \
                       mkdir ${Pkg_Name} -p && \
                       tar xf ${Pkg_Name}.tar.gz -C ${Pkg_Name} && \
                       rm -f /code/web && \
                       ln -s ${Web_Dir}/${Pkg_Name} /code/web_monitor"
  done
}

deploy (){
    tar_code
    scp_code
}

    deploy

4.模拟开发人员修改代码,提交代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.立即构建,查看项目网页

在这里插入图片描述

在这里插入图片描述

👔5.Jenkins实现版本回滚

1.在Jenkins添加一个freestyle的job,配置配置文本的参数化构建,最后编写脚本实现回滚功能。

[root@jenkins scripts]# cat html_rollback_tag.sh
[root@jenkins scripts]# cat /scripts/html_rollback.sh
#!/usr/bin/bash# 回退脚本
# 1.登陆目标集群服务
# 2.删除软连接、重建软连接
​
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.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.发现此前部署的v1.2有很多Bug。现在想回退至v1.1版本,找到回退的job,填写回退的版本号即可。
在这里插入图片描述

👔6.Jenkins重复构建项目

前面我们已经实现代码按照版本的方式发布与回退了,但是还有一个问题,如果我此前部署过v1.1,如果我不小心在部署了一次v1.1还是会提示部署成功。那能否实现,部署过的版本不允许再次重复部署。

# 在此前tags部署脚本的开头加上如下判断。#如果是部署,需要检查是否已经部署过该tag版本,如果部署过则不允许重复构建
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
        echo ""
        echo "你已经成功部署过 ${GIT_COMMIT} 他对应的Tags  ${git_version}"
        echo "请不要尝试无需重复部署." && exit 1
        echo ""
fi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值