1.Gitlab安装配置
1.1 git配置环境准备
1. 查看系统版本
[root@gitlab ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
2. 查看内核版本
[root@gitlab ~]# uname -r
3.10.0-957.el7.x86_64
3. 确认Selinux关闭状态
[root@gitlab ~]# getenforce
Disabled
4. 确认防火墙关闭
[root@gitlab ~]# systemctl stop firewalld
1.2 Git安装部署
1. 安装Git
[root@gitlab ~]# yum install -y git
[root@gitlab ~]# git --version
git version 1.8.3.1
2. 配置git使用用户、邮箱、 语法高亮
git config --global user.name "kongdi" # 配置git使用用户
git config --global user.email "kongdi@mail.com" # 配置git使用邮箱
git config --global color.ui true # 语法高亮
3. 检查
[root@gitlab ~]# git config --list
user.name=kongdi
user.email=kongdi@mail.com
color.ui=true
[root@gitlab ~]# cat .gitconfig
[user]
name = kongdi
email = kongdi@mail.com
[color]
ui = true
4. git初始化工作目录
mkdir git_data
cd git_data/
git init #初始化
git status #查看工作区状态
注:对已存在的目录或者对已存在的目录都可进行初始化
1.3 gitlab环境准备
1. CentOS 6或者7
2. 2G内存(实验)生产(至少4G)
3. 安装包:gitlab-ce-10.2.2-ce
#上传gitlab安装包 ,可通过国内清华源gitlab-ce社区版本下载
4. 禁用防火墙,关闭selinux
1.4 Gitlab安装部署
1. 安装依赖和软件
yum -y install policycoreutils-python
rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
2. 编写gitlab 配置文件
vim /etc/gitlab/gitlab.rb
更改url地址为本机IP地址 external_url 'http://10.0.0.200'
3. 更改配置文件后需重新配置
gitlab-ctl reconfigure
4. 通过浏览器输入IP地址进行访问gitlab
10.0.0.200---创建密码12345678
2. gitlab的简单配置
1. 配置外观
管理区域-外观
2. 关闭自动注册-可根据实际需求操作(建议:不勾选)
管理区域-设置-关闭自动注册(Sign-up enabled)
3. 创建组-用户-项目

2.1 创建组、项目、用户
创建组


创建新项目

添加gitlab的key到网页

创建用户

设置密码

打开无痕窗口登录测试

把用户添加到组里面

添加ssh-keys到gitlab的dev用户

在root用户上设置保护主分支

2. Jenkins安装配置
1.安装JDK运行环境和jenkins服务
上传JDK和jenkins rpm安装包,使用rpm -ivh进行安装,安装完JDK运维java测试是否安装成功
rpm -ivh jdk-8u181-linux-x64.rpm
rpm -ivh jenkins-2.176.1-1.1.noarch.rpm
2.配置jenkins(启动用户修改为root)
[root@jenkins ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
#启动Jenkins
systemctl restart jenkins
systemctl enable jenkins
3.访问页面进行配置
http://10.0.0.201:8080

4.上传插件包解压到plugins下执行重启
rz jenkins_plugins.tar.gz到/var/lib/jenkins下
cd /var/lib/jenkins
rm -rf plugins
tar xf jenkins_plugins.tar.gz
systemctl restart jenkins


更改密码为123
2.1 创建项目配置

1)jenkins获取git源码,这里我们有码云导入一个HTML页面的监控平台到gitlab仓库

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

3)执行立即构建获取到代码

3. Jenkins结合gitlab自动化上线

3.1 准备脚本文件
[root@jenkins scripts]# cat deploy.sh
#!/bin/sh
code_dir=/var/lib/jenkins/workspace/my-freestyle-job
web_dir=/usr/share/nginx/
time=`date +%F-%H-%M-%S`
ip=10.0.0.7
code_tar(){
cd $code_dir && tar zcf /opt/$time-web.tar.gz ./*
}
scp_code(){
ssh $ip "mkdir $web_dir/$time-web"
scp /opt/$timeweb.tar.gz $ip:$web_dir/$time-web
}
tar_xf(){
ssh $ip "cd $web_dir/$time-web && tar xf $time-web.tar.gz && rm -f $time-web.tar.gz"
}
ln(){
ssh &ip "cd $web_dir && rm -rf html && ln -s $time-web html"
}
main(){
code_tar
scp_code
tar_xf
ln
}
main
3.2 web服务器准备
1.在web服务器安装nginx,启动,删除/usr/share/nginx/html/下的所有文件
[root@web ~]# rm -rf /usr/share/nginx/html/*
2.在Jenkins上做免密钥
[root@jenkins ~]# ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7
#测试 ssh 10.0.0.7
3.执行脚本,刷新10.0.0.7网站
sh /server/scripts/deploy.sh

3.3 jenkins测试
1)使用jenkins调用部署脚本(此处写脚本全路径脚本名称)测试

2)点击立即构建,查看输出成功

3.4 模拟开发上传代码并自动化上线
1)将代码克隆到本地
[root@gitlab ~]# git clone git@10.0.0.200:oldboy/monitor.git
2)修改代码内容,便于观察不同
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">Simulation development test</a>
3)提交代码,推送到master
[root@gitlab monitor]# git commit -am "模拟开发测试"
[root@gitlab monitor]# git push -u origin master
4)在Jenkins页面点击立即构建(会去gitlab上拉取最新的代码)
5)刷新10.0.0.7网站,查看变化

3.5 jenkins自动触发构建
3.5.1 构建触发器
token:23b30c25f816f78930d7a9135b4baa27

3.5.2 gitlab配置钩子密钥码

3.5.3 测试jenkins自动触发构建
1)修改代码内容,观察不同
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">Auto trigger build</a>
2)提交代码,推送到master
[root@gitlab monitor]# git commit -am "自动触发构建"
[root@gitlab monitor]# git push -u origin master
3)刷新10.0.0.7网站,查看变化

4. 优化自动代码上线
4.1 将上线结果反馈到gitlab
4.1.1在gitlab上生成token


Access Tokens:yQdRA_WD_y5epKGfFPi7
4.1.2 在Jenkins上配置token



4.1.3 my-freestyle-job项目配置api token

4.1.4 测试结果有没有反馈到gitlab上
1)修改代码内容,观察不同
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">Result feedback to gitlab</a>
2)提交代码,推送到master
[root@gitlab monitor]# git commit -am "结果反馈到gitlab"
[root@gitlab monitor]# git push -u origin master
3)刷新10.0.0.7网站,查看变化
4)在gitlab出现v1.1和对号


4.2 避免重复执行
4.2.1 修改脚本
#当前提交的==提交过的
"$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT"
[root@jenkins scripts]# cat deploy.sh
#!/bin/sh
code_dir=/var/lib/jenkins/workspace/my-freestyle-job
web_dir=/usr/share/nginx/
time=`date +%F-%H-%M-%S`
ip=10.0.0.7
code_tar(){
cd $code_dir && tar zcf /opt/$time-web.tar.gz ./*
}
scp_code(){
ssh $ip "mkdir $web_dir/$time-web"
scp /opt/$timeweb.tar.gz $ip:$web_dir/$time-web
}
tar_xf(){
ssh $ip "cd $web_dir/$time-web && tar xf $time-web.tar.gz && rm -f $time-web.tar.gz"
}
ln(){
ssh &ip "cd $web_dir && rm -rf html && ln -s $time-web html"
}
main(){
code_tar
scp_code
tar_xf
ln
}
if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "当前版本已提交过,不允许重复构建"
exit
else
main
fi
4.2.2 在jenkins点击立即构建查看输出结果

4.2.3 提交新版本测试
1)修改代码内容,观察不同
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">Optimize scripts</a>
2)提交代码,推送到master
[root@gitlab monitor]# git commit -am "优化脚本"
[root@gitlab monitor]# git push -u origin master
3)刷新10.0.0.7网站,查看变化
4)在jenkins查看输出结果


5. Jenkins实现一键化升级回滚
5.1 在gitlab服务器上打标签
1.更改代码,提交
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">tag v1.1</a>
[root@gitlab monitor]# git commit -am "优化脚本"
2.打标签
[root@gitlab monitor]# git tag -a v1.1 -m "v1.1稳定版"
3.查看标签
[root@gitlab monitor]# git tag
4.推送到gitlab
[root@gitlab monitor]# git push -u origin v1.1

5.2 创建项目

5.3 配置
配置脚本
[root@jenkins ~]# cat /server/scripts/deploy_rollback.sh
#!/bin/sh
CODE_DIR="$WORKSPACE"
WEB_DIR="/usr/share/nginx/"
get_code_tar(){
cd $CODE_DIR && tar zcf /opt/web-${git_version}.tar.gz ./*
}
scp_code_web(){
scp /opt/web-${git_version}.tar.gz 10.0.0.7:$WEB_DIR
}
code_tarxf(){
ssh 10.0.0.7 "cd $WEB_DIR && mkdir web-${git_version} && tar xf web-${git_version}.tar.gz -C web-${git_version} && rm -f web-${git_version}.tar.gz"
}
ln_html(){
ssh 10.0.0.7 "cd $WEB_DIR && rm -rf html && ln -s web-$git_version html"
}
main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
if [ "$deploy_env" == "deploy" ];then
if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "当前版本已提交过,不允许重复构建"
exit
else
main
fi
elif [ "$deploy_env" == "rollback" ];then
ln_html
fi
添加选项参数升级和回滚

5.4 测试、查看结果


6. Jenkins页面tag打标签
6.1 创建项目

6.2 配置

6.3 测试
1.更改代码
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">tag v1.2</a>
2.提交
[root@gitlab monitor]# git commit -am "v1.2稳定版"
3.推送到gitlab
[root@gitlab monitor]# git push -u origin master

访问网站10.0.0.7

7. 测试使用版本号一键升级和回滚
7.1 一键升级
1.更改代码
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">tag v1.3</a>
2.提交
[root@gitlab monitor]# git commit -am "v1.3稳定版"
3.推送到gitlab
[root@gitlab monitor]# git push -u origin master
tag打标签

一键升级

7.2 秒级回滚

8. 微信通知
8.1 需要注册企业微信
8.2 上传脚本到jenkins
1. 上传jenkins_notify.py到jenkins服务器的/server/scripts下
[root@jenkins scripts]# cat /server/scripts/jenkins_notify.py
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
import requests,sys,json
import urllib3
urllib3.disable_warnings()
reload(sys)
sys.setdefaultencoding('utf-8')
def GetToken(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
Token = r.json()['access_token']
return Token
def SendMessage(Token,Subject,Content, ProName):
#Url = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=%s" % Token
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
#Data = {
# "chatid": "JenkinsAlarm", # 此处不明白请参考企业微信官网
# "msgtype": "text",
# "text": {
# "content": "[项目名称] : " + ProName + '\n' + "[项目地址] : " + Subject + '\n' + Content + '\n'
# },
# "safe": "0"
#}
data = {
"touser" : "KongDi",
"msgtype" : "text",
"agentid" : 1000002,
"text" : {
"content" : "[项目名称] : " + ProName + '\n' + "[项目地址] : " + Subject + '\n' +
Content + '\n'
},
"safe":0
}
r = requests.post(url=Url,data=json.dumps(data),verify=False)
return r.text
def action_from_file(filename):
try:
str1 = '[变更日志] : '
with open(filename, 'r') as f:
for i in f.readlines():
str1 += i
print str1
if len(str1) == 17:
str1 += " 无变更"
# print str1
return str1
except Exception as e:
#print('[ERROR] {0}'.format(e))
str1 += str(e)
if __name__ == '__main__':
Corpid = "ww65c0801a4801a330"
Secret = "eZDNZ0vIYEJtNENdoYNnHQ3-EHu6BkGXwZSzbKziUMs"
Subject = sys.argv[1]
Content = action_from_file(sys.argv[2])
ProName = sys.argv[3]
Token = GetToken(Corpid, Secret)
Status = SendMessage(Token,Subject,Content,ProName)
print Status
2. 注意点
[root@jenkins scripts]# vim jenkins_notify.py
33 data = {
34 "touser" : "KongDi",
35 "msgtype" : "text",
36 "agentid" : 1000002,
62 if __name__ == '__main__':
63 Corpid = "ww65c0801a4801a330" #企业id
64 Secret = "eZDNZ0vIYEJtNENdoYNnHQ3-EHu6BkGXwZSzbKziUMs"
8.3 完成后配置jenkins(发送信息的格式)
Entry Format中添加 %3$s(at %4$s via %1$s),参数分别为ChangeLog内容,时间,提交人。
Date Format中添加 yyyy-MM-dd HH:mm:ss 就是时间格式。

1.如果没有此选择请安装Hudson Post build task插件,SCM_CHANGELOG须安装changelog插件,上传py脚本到
2.jenkins服务器上安装python requests模块
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@jenkins ~]# yum -y install python-pip
[root@jenkins ~]# pip2.7 install requests
8.4 测试
8.4.1 推送代码到
1)修改代码内容,观察不同
[root@gitlab ~]# cd monitor/
[root@gitlab monitor]# vim index.html #更改43行首页显示的内容
<a class="logo pull-left" href="index.html" style="width: 233px">v1.5 Send wechat to didi</a>
2)提交代码,推送到master
[root@gitlab monitor]# git commit -am "发送微信给didi"
[root@gitlab monitor]# git push -u origin master

8.4.2 打标签

本文详细介绍了如何将Jenkins与Gitlab整合,实现从代码提交到自动上线的全流程自动化。涵盖了Gitlab的安装配置、Jenkins的安装及项目配置,以及自动触发构建、反馈上线结果、避免重复执行、一键升级回滚和微信通知等优化步骤。

904

被折叠的 条评论
为什么被折叠?



