Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署
什么是持续集成?
(1)Continuous integration (CI)
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
(2)没有持续集成
项目做模块集成的时候,发现很多接口都不通==>浪费大量时间
需要手动去编译打包最新的代码==>构建过程不透明
发布代码,上线,基本靠手工==>脚本乱飞
(3)持续集成最佳实践:
维护一个单一的代码库
使构建自动化
执行测试是构建的一部分
集成日志及历史记录
使用统一的依赖包管理库
每天至少集成一次
熟悉Jenkins
如何安装Jenkins此文省略,可参考 安装文档
(1)登录Jenkins webUI界面创建第一个项目
(2)输入项目名称(My-freestyle-job)并选择构建一个自由风格的软件项目
(3)上面创建完成后跳转进来后进行配置,选择丢弃旧的构建(下面保持天数一般在5~7天即可)
(4)接着上面选择构建,然后选择Execute Shell 来执行shell命令
(5)既然能执行shell命令,那么我们执行一个pwd,看下默认的工作目录在哪里
(6)上面保存后点击立即构建,就会在下面生成一个build history,(出现蓝色即表示正常,若红色即表示有问题)
(7)构建完成,我们可以点击build ID下拉框选择Console Output 来查看详细信息
(8)通过输出信息我们可以看到Jenkins默认的工作目录在 /var/lib/jenkins/workspace/(项目名称)
(9)既然能执行shell命令,那么我们创建一个文件试试;返回工作台,点击配置
(10)创建一个test.txt文件并保存
(11)同上面一样,我们点击立即构建
(12)同样查看构建后的控制台输出,可以看到构建成功
(13)既然构建成功,那么我们进入服务器进行验证是否创建成功
[root@jenkins ~]# cd /var/lib/jenkins/workspace/My-freestyle-job/ #进入到项目目录
[root@jenkins My-freestyle-job]#
[root@jenkins My-freestyle-job]# ls #查看确实创建了文件
test.txt
[root@jenkins My-freestyle-job]# rm -rf test.txt #因为没有什么用,测试完了,我们将其删除
[root@jenkins My-freestyle-job]#
GitLab+Jenkins实现自动更新代码
流程图示例:
说明:
通过gitlab+Jenkins实现代码的自动更新同步代码到web服务器站点目录。此处示例后端web服务器使用nginx。本次项目示例使用码云上面的一个html项目(https://gitee.com/kangjie1209/monitor.git)
环境说明:
192.168.1.21 | GitLab服务器 |
192.168.1.22 | Jenkins服务器 |
192.168.1.26 | Nginx服务器 |
https://gitee.com/kangjie1209/monitor.git 项目访问示意图:
GitLab配置
说明:
首先我们在gitlab上面创建一个群组,并创建一个dev开发用户(用于提交代码等),同时在Jenkins服务器上面生成ssh秘钥并将key添加到新建用户dev的ssh认证下面,并创建一个代码仓库,并将代码copy进去。
具体操作步骤:
(1)登录gitlab点击项目,然后点击创建一个群组
(2)点击新建群组
(3)输入新建群组的相关信息并点击创建
(4)点击设置选择新建用户
(5)输入账号相关信息并点击创建用户
(6)点击编辑,为上面新创建的用户设置密码
(7)给这个账号设置密码并保存
(8)将上面创建的用户添加到devops组中并给与开发者权限
(9)找到刚刚创建的dev用户并给予开发人员权限,然后增加用户到群组
(10)回到Jenkins上面生成ssh秘钥
[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt9+3rxKFGTEeT4F4q4AEc+So3A4jMBMpW6Ojoy5h1VQhNVV6meuOGp7ltJXtmY0Bm7tw8S/KDVXPSCvDi3QQgzWe2ZQmG+Y62SKcXpDxOJue98OHDNoxcm2kJl/xeFZddQZd6eohbBA9Au4SPMINLsGR6MEYXH4JHM6rXzf9QN4Q5GYYEFTTZvu/PxoDq46+A/mkO5aklBjaih6YSH3q7nr2rEhQJ64b6wEkfBjptfzKm54TZBJAPzycHrXe5P68tPZ2CNgJN+40XGrkg/MVjf9D9EwjyvsNcdLzTHDsClc3Jh8/8tfSFFzVFonyKyjal9amCvzdVbnUEqQSgRTWT root@jenkins
(11)回到gitlab服务器上面使用dev用户登录,然后点击头像选择设置
(12)上面的设置点进来后,选择SSH 秘钥, 然后复制Jenkins服务器上生成的秘钥然后点击增加秘钥
(13)切回root用户,新建一个项目
(14)选择导入项目并输入相关信息,然后点击创建项目
(15)导入成功后可以看见代码和导入成功提示,至此gitlab暂时部署到此
Jenkins配置
说明:
还是使用前面示例创建的My-freestyle-job项目,配置导入上面gitlab创建的项目
具体操作步骤:
(1)点击项目名称开始配置
(2)上面点击进去后点击配置
(3)选择源码管理,选Git,输入仓库URL地址(如果下方出现红色及表示出错了),然后选择保存
(4)立即构建
(5)查看构建详细信息
(6)进入到服务器中查看项目目录是否将代码拉取成功
[root@jenkins ~]# cd /var/lib/jenkins/workspace/My-freestyle-job/
[root@jenkins My-freestyle-job]# ls
.html efficiencyAnalysis.html js other-components.html
alerts.html energy_consumption.html keyInfo.html profile-page.html
assets file-manager.html labels.html QHME.iml
buttons.html fonts LICENSE readme.md
calendar.html form-components.html list-view.html real-time.html
charts.html form-elements.html login.html sa.html
components.html form-examples.html media tables.html
content-widgets.html form-validation.html media.html test.txt
css images-icons.html messages.html typography.html
deviceManager.html img mstp_105_SuperAdmin.iml userMng.html
dianfei.html index.html mstp_map.html
可以看到Jenkins已经成功从gitlab上面拉取代码,接下来我们先将Web站点配置好再看如何自动同步到Web服务器上面。
Web Server站点配置
说明:
此处我们直接yum安装nginx,站点目录就用默认的 /usr/share/nginx/html 目录。
详细操作步骤:
(1)安装nginx并修改测试页面
[root@web-nginx ~]# yum install nginx -y
[root@web-nginx ~]# ll /usr/share/nginx/
总用量
drwxr-xr-x. root root 3月 : html
[root@web-nginx ~]# echo "<h1>Web Server</h1>" > /usr/share/nginx/html/index.html
[root@web-nginx ~]# systemctl start nginx
[root@web-nginx ~]# curl -I localhost
HTTP/1.1 OK
Server: nginx/1.12.
Date: Wed, Mar :: GMT
Content-Type: text/html
Content-Length:
Last-Modified: Tue, Mar :: GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes
(2)访问nginx服务器
nginx站点部署ok,接下来就是实现如何构建够自动同步到nginx服务器
自动化同步代码
说明:
上面已经完成了Jenkins从gitlab上面拉取代码,及nginx web服务器站点的布置,现在需要实现的是如何Jenkins上面构建后自动同步到web服务器。想一下,在上面我们可以执行shell命令,那么一定也就可以执行shell脚本。so 我们编辑一个同步脚本,然后构建触发脚本同步到web服务器上面。
具体操作步骤:
(1)在Jenkins服务器上面编写同步脚本,由于是通过脚本拷贝到web服务器的站点目录,所以需要先做一个ssh秘钥认证
[root@jenkins ~]# ssh-copy-id -i 192.168.1.26
[root@jenkins ~]# mkdir /server/scripts -p
[root@jenkins ~]# cd /server/scripts/
[root@jenkins scripts]# vim deploy.sh
#!/bin/bash CODE_DIR="/var/lib/jenkins/workspace/My-freestyle-job/" #项目目录
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S` #时间格式
TAR_NAME=web-${DATE_TIME}.tar.gz #打包后的名字
WEB_ADDR=192.168.1.26 #web服务器地址
WEB_DIR="/usr/share/nginx/" #web服务器站点目录的上一级 "/usr/share/nginx/html"
WEB_NEWDIR_NAME=web-${DATE_TIME} #web服务器新建的站点目录名字 #进入到项目目录并进行打包代码
tarcf_code(){
cd $CODE_DIR && tar czf /opt/$TAR_NAME ./*
} #拷贝到web服务器的站点目录的上一级
scp_code(){
scp /opt/$TAR_NAME $WEB_ADDR:$WEB_DIR
} #连接web服务器进行解压压缩包到新的一个已时间命名的站点目录
tarxf_code(){
ssh $WEB_ADDR "cd $WEB_DIR && mkdir $WEB_NEWDIR_NAME && tar xf $TAR_NAME -C $WEB_NEWDIR_NAME"
} #将新建的站点目录与html站点目录做一个软链接
ln_code(){
ssh $WEB_ADDR "cd $WEB_DIR && rm -rf html && ln -s $WEB_NEWDIR_NAME html"
} del_code(){
ssh $WEB_ADDR "cd $WEB_DIR && rm -rf $TAR_NAME"
} main(){
tarcf_code;
scp_code;
tarxf_code;
ln_code;
del_code;
}
main
(2)配置Jenkins,使用Jenkins调用部署脚本(此处写脚本全路径脚本名称)
(3)配置自动触发构建、需要设置安全令牌Secret token,进入项目选择配置,设置相关信息,然后生成token,复制token(需要填写到gitlab上面)和Build when a chang上面提示的URL地址(http://192.168.1.22:8080/project/My-freestyle-job)
(4)配置gitlab,添加token
(5)测试Web钩子
(6)上面已经配置完成,接下来就是测试,我们知道目前web服务站点访问得到的一个“Web Server”, 在另外一台机器上面克隆代码并进行修改(此处我就使用Jenkins顺便来做测试了),然后推送gitlab仓库
[root@jenkins ~]# git clone git@192.168.1.21:devops/monitor.git
[root@jenkins ~]#
[root@jenkins ~]# cd monitor/
[root@jenkins monitor]#
[root@jenkins monitor]# vim index.html //将里面的”移动能效管理平台“ 全部改成”GitLab+Jenkins自动化“
[root@jenkins monitor]#
[root@jenkins monitor]# git add .
[root@jenkins monitor]#
[root@jenkins monitor]# git commit -m "update index.html"
[root@jenkins monitor]#
[root@jenkins monitor]# git push origin master
(7)访问web站点,刷新页面
(8)从上面页面可以看见已经自动更新了代码,接下来我们查看web服务器上面的web站点目录
[root@web-nginx ~]# ll /usr/share/nginx
总用量
lrwxrwxrwx. root root 3月 : html -> web------
drwxr-xr-x. root root 3月 : modules
drwxr-xr-x. root root 3月 : web------
[root@web-nginx ~]# ls /usr/share/nginx/html/
.html efficiencyAnalysis.html js other-components.html
alerts.html energy_consumption.html keyInfo.html profile-page.html
assets file-manager.html labels.html QHME.iml
buttons.html fonts LICENSE readme.md
calendar.html form-components.html list-view.html real-time.html
charts.html form-elements.html login.html sa.html
components.html form-examples.html media tables.html
content-widgets.html form-validation.html media.html test.txt
css images-icons.html messages.html typography.html
deviceManager.html img mstp_105_SuperAdmin.iml userMng.html
dianfei.html index.html mstp_map.html
从上面我们可以看到站点目录多了一个“web-2019-03-29-12-20-51”目录, 且与html目录做了一个软链接,这样每次更新代码都会新建一个目录与站点目录做软链接,(好处,如果开发发现代码有bug,还可以及时回滚到前面的版本)至此,就完成了自动更新代码。
配置构建Jenkins返回构建状态到gitlab
(1)先在gitlab上面生成访问令牌token,点击用户处的设置
(2)访问令牌——>输入名称——>选择范围为api——>创建个人访问令牌,将生成的令牌token复制
(3)登录Jenkins——>选择系统管理——>选择系统设置——>选择Gitlab——输入名字——>输入URL——点击Add
(4)上面点击Add进来后,kind处选择Gitlab API token,粘贴上面复制的token,自定义ID和描述
(5)上面添加后,回到这里选择刚刚生成的这个token。然后点击保存
(6)上面保存后,进入到项目里选择配置,配置构建后操作,选择Publish ... to ...Gitlab,选择后直接保存就ok
(7)测试,点击立即构建
(8)回到gitlab上面查看,那里生成了一个对号
(9)点击对号,进来后可以看到流水线,下面一些信息,比如状态,提交等。
(10)点击上面Status下面的对号,可以看到如下图一样的有个jenkins-success
(11)再点击jenkins就跳转到jenkins上面去了,也可以查看输出,还可以查看工作空间,可以查看到所有代码,返回的话只能选择后退。
以上就完成了配置构建状态返回到gitlab
Linux-GitLab+Jenkins持续集成+自动化部署的更多相关文章
- CentOS 7 Gitlab+Jenkins持续集成+自动化部署
基于上次的环境<部署Gitlab+Jenkins持续集成环境> 来实现自动化部署 系统管理–>插件管理–>安装以下插件: Credentials Plugin(默认已经安装) ...
- Linux环境:持续集成环境部署系列
之前的博客介绍了Linux环境下持续集成环境部署的一些内容,这篇博客将其整理一下,算做一个index,方便自己和大家查阅... 1.linux下安装JDK Jenkins是一个java开源的持续集成工 ...
- Jekens 配置多项目SCM GitLab+Jenkins持续集成环境
参考: 搭建GitLab+Jenkins持续集成环境图文教程 https://blog.csdn.net/ruangong1203/article/details/73065410 Jenkins中配 ...
- 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]
转载:https://www.abcdocker.com/abcdocker/2065 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkin ...
- CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境
持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试 开发→代 ...
- Jenkins持续集成与部署
一.Jenkins简介 在阅读此文章之前,你需要对Linux.Docker.Git有一定的了解和使用,如果还未学习,请阅读我前面发布的相关文章进行学习. 1.概念了解:CI/CD模型 CI全名Cont ...
- GitLab+Jenkins持续集成
一.概述 GitLab是一个代码仓库,用来管理代码.Jenkins是一个自动化服务器,可以运行各种自动化构建.测试或部署任务.所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins ...
- gitlab+jenkins持续集成(三)
构建: 需要将jenkins服务器上 jenkins用户的公钥发送给 目标服务器的gs用户,使得在jenkins上能用gs免密登录目标服务器 复制密钥到目标机器上(需要登录到的机器) ssh-co ...
- gitlab+jenkins持续集成(一)
1. 环境:CentOS7.0,jdk-8u91-linux-x64.rpm,jenkins 2.7.4 ,gitlab 9.2.2 2. 安装jdk,jenkins (rpm -ivh ...
随机推荐
- web前端图片上传(3)--filereader
这篇文章主要是为了介绍一种文件上传的方式.当然文件中是包含图片的.如果大家仔细看我的第一篇web前端图片上传(1)就会知道,其实也是按照这种方式上传你的,但是由于上次时间比较紧张,没有详细的介绍今天的 ...
- flex-手机端主页布局实例---构造页面结构
Flexbox页面布局实例,成本效果图如下, 源码下载在最下面. 源码下载:https://pan.baidu.com/s/18o5hVuWtflUpgvMk3LzQ5w 提取码:wiyc样本地址: ...
- U813.0操作员功能权限和数据权限的设置
操作员的权限有功能权限.数据权限.金额权限. 1. 给操作员设置功能权限,操作员才能进入系统进行相关业务操作. Admin用户登录无法修改账套,但可以新建.引入.输出.Demo用户每次只能进入一个账套 ...
- react native中一次错误排查 Error:Error: Duplicate resources
最近一直在使用react native中,遇到了很多的坑,同时也学习到了一些移动端的开发经验. 今天在做一个打包的测试时,遇到了一个问题,打包过程中报错“Error:Error: Duplicate ...
- Jmeter接口测试实战-数据传递
Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...
- Python 经典面试题汇总之数据库篇
数据库和缓存 1.列举常见的关系型数据库和非关系型都有那些? 关系型数据库(需要有表结构) mysql.oracle.splserver.postgresql.db2.sybase 非关系型数据库(是 ...
- Python之函数参数
# -*- coding: utf-8 -*- """ Created on Fri Sep 7 09:13:50 2018 @author: zhen "&q ...
- 数据库原理 - 序列7 - Binlog与主从复制
本文节选自作者书籍<软件架构设计:大型网站技术架构与业务架构融合之道>.作者微信公众号:架构之道与术.公众号底部菜单有书友群可以加入,与作者和其他读者进行深入讨论.也可以在京东.天猫上购买 ...
- javaFX笔记----ComboBox模仿qq账号下拉框删除账号
myComboBox.setCellFactory( new Callback<ListView<String>, ListCell<String>>() { @O ...
- HTML语义化的理解
语义化的主要目的:用正确的标签做正确的事情. 语义化验证方法:css裸奔--去掉css样式,然后看页面是否还具有很好的可读性. 语义化意义 / 优点: 1.让页面的内容结构化 2.利于浏览器解析和SE ...