【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署
================================================================================================================================================
需求:
1.已经启动了jenkins【https://www.cnblogs.com/sxdcgaq8080/p/10489369.html】
2.已经启动了gitlab【https://www.cnblogs.com/sxdcgaq8080/p/10484576.html】
3.jenkins需要按照上面步骤,已经确定maven插件和Git插件和GitLab插件和GitLab hook插件和Maven Integration插件和Publish Over SSH插件已经成功安装【Git插件在第一篇初始化启动,推荐安装的、其他几个插件是在第一篇末尾安装的】
================================================================================================================================================
需要了解的:
1.webhook网络钩子 可以看成是一个callback 回调方法
本回调方法核心即包含:
触发条件+可供触发的URL+密码(可选)
触发条件为:push、merge、PR(即 New Pull Request)等等git操作,
比如你提交一个push操作,就会触发URL请求,会以POST请求去请求这个URL。 除此以外,你还可以自己指定这个POST请求的数据格式。(JSON,x-www-form-urlencoded等)。
2.webhook是gitlab端的 触发webhook的条件,可以自行配置,都是本地对gitlab的git操作 触发后去请求的URL地址,是Jenkins提供的。也就是触发后是去请求Jenkins的
3.而实现代码从gitlab到jenkins到自动部署,webhook就是gitlab和jenkins之间的关键点。 后续会先配置jenkins,以获取到URL和Token,拿着这两个东西去gitlab配置webhook,即可。 同时,webhook本身还会有很多的触发条件可以勾选。后续步骤可见!
=================================================================正文开始====================================================================================
1.jenkins全局工具配置【docker容器Jenkins,自动安装】
地址:https://www.cnblogs.com/sxdcgaq8080/p/10571718.html
2.jenkins全局安全配置
进入系统管理 ------> 全局安全配置
取消勾选CSRF
原因:
webhooks与jenkins配合使用时提示:HTTPStatus403-Novalidcrumbwasincludedintherequest,这是因为jenkins在http请求头部中放置了一个名为.crumb的token。在使用了反向代理,并且在jenkins设置中勾选了“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)”之后此token会被转发服务器apache/nginx认为是不合法头部而去掉。导致跳转失败。
3.新建Jenkins任务
3.1点击新建任务,输入名称【本处输入名称注意】
【注意,本名称一般和项目名称一致,因为本名称会在jenkins工作空间下生成目录,类似于IDEA或Ecplise的工作空间的概念】
【所以,一般情况下,保证本名称=项目名称=docker镜像名称=docker容器名称 这样能尽可能的减轻jenkins配置的shell命令的复杂性!从而形成一定的规范!!】
选择构建一个Maven项目【因为是spring boot的服务】
3.2 General选项卡,通用设置下输入描述信息
自由输入
3.3 Source code manager 源码管理 选择Git
【内网推荐使用Http地址去clone项目】
【分别使用SSH和HTTP取clone项目,可以去看:https://www.cnblogs.com/sxdcgaq8080/p/10577252.html】
【如果此处添加地址后报错,或者Jenkins构建报错:Please make sure you have the correct access rights and the repository exists.去看这篇:https://www.cnblogs.com/sxdcgaq8080/p/10577241.html】
3.4 Build Triggers 构建触发器的配置
【构建触发器中配置,会获取到文章开始提到的URL和Token,这两个东西需要记录下来,供gitlab配置webhook使用】
记录URL
http://192.168.92.130:9980/project/swapping
URL和Token都需要填写到GitLab中,去配置webhooks!!!
点击高级后,最下方可以点击生成Token
记录Token
6b2eb2c3a9d1d2f64c73784bf30a4cda
3.5 Build Environment 构建环境的配置根据自己需求配置
3.6 Pre Steps 即jenkins构建前一步 需要做的事情
【本处,配置前一步需要做的事情是:清理swapping即本项目在jenkins的workspace中的历史文件夹】
【在本步骤配置时,你可以不用知道WORKSPACE具体的地址在哪里,因为下方有链接可以查看到当前jenkins中有哪些可用的变量供你使用】
【默认WORKSPACE地址:/var/jenkins_home/workspace】
【当然,如果你jenkins是docker启动的,并且挂载了目录在宿主机,那你在宿主机也是可以看到的】
【注意:本处选择是是,执行shell,则表示本处配置的shell命令,是默认在jenkins容器中执行的,而不是在宿主机上】
可以查看可用的全局变量
前一步要做的shell命令:
SERVER_NAME_1=swapping
echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE "
cd $WORKSPACE echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 "
rm -rf $SERVER_NAME_1 echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"
【注意:本处的SERVER_NAME_1=swapping 是配置的项目的名称】
3.7 Build 构建的配置
jenkins构建项目,本处是以maven插件实现的。
因此,配置
clean package
3.8 Post Steps 即jenkins构建完成后一步配置
【本处选择,只在jenkins构建成功后,再执行这一步】
【因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker操作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器】
【所以本处选择,在远程的SSH执行shell脚本】
【因此,必须要求,文章初始的第一篇中,必要安装的插件已经要安装完成。此处尤其是Publish Over SSH插件以及它的相关配置】
shell命令如下:
#=====================================================================================
#=================================定义初始化变量======================================
#===================================================================================== #操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/apps/swapping # jenkins构建好的源jar路径
SOURCE_PATH=/apps/Devops/jenkins/workspace #【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
#这里都以这个命名[微服务的话,每个服务都以ms-swapping这种格式命名]
#注意统一名称!!!!!
SERVER_NAME=swapping #容器id [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID] [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}') #镜像id [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}') #源jar完整地址 [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
#例如:/apps/Devops/jenkins/workspace/swapping/target/swapping-0.0.1-SNAPSHOT.jar
SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/target/" -name "*$SERVER_NAME*.jar" ) DATE=`date +%Y%m%d%H%M%S` #=====================================================================================
#============================对原本已存在的jar进行备份================================
#===================================================================================== # 备份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成" else
echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
fi
} #=====================================================================================
#=========================移动最新源jar包到Dockerfile所在目录=========================
#===================================================================================== # 查找源jar文件名,进行重命名,最后将源文件移动到项目环境
function transfer(){ echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH" echo "=========================>>>>>>>重命名源文件"
mv $SOURCE_JAR_PATH $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH"
cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH echo "=========================>>>>>>>迁移完成Success" } #=====================================================================================
#==================================构建最新镜像=======================================
#===================================================================================== # 构建docker镜像
function build(){ #无论镜像存在与否,都停止原容器服务,并移除原容器服务
echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
docker rm $CID #无论如何,都去构建新的镜像
if [ -n "$IID" ]; then
echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
docker rmi $IID echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->" else
echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->" cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
fi
} #=====================================================================================
#==============================运行docker容器,启动服务===============================
#===================================================================================== # 运行docker容器
function run(){
backup
transfer
build docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro $SERVER_NAME } #入口
run
【本命令的详解:https://www.cnblogs.com/sxdcgaq8080/p/10599166.html】
3.9 最后,点击应用,并保存
4.GitLab配置
下来就是GitLab这边的配置!!
4.1 打开gitlab,并进入要自动部署的项目,点击左侧setting
4.2 Integration 选择集成,开始配置webhook
将从jenkins获取到的URL和Token,填写在此处
【根据自己的需求,勾选webhook的触发事件都有哪些】
最后点击添加
添加后,即可在下方看到刚刚添加的webhook!!
然后即可点击Test,选择刚刚勾选的绑定的触发事件 ,即可回到jenkins查看测试效果!!!
对于 上面勾选的权限,测试结果如下,即代表成功!!!
对于未勾选的 权限 接口,点击测试
未授权的接口 测试 是这个结果!!!!!
5.回到jenkins,查看测试效果,或自行进行构建事件
再次回到Jenkins,开始进行构建!!!
下方显示出构建的任务进度,可以点击进去,查看控制台输出
===========================================================================================
至此,spring boot在jenkins+gitlab+docker的自动化部署,完成!!!
【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署的更多相关文章
- Devops、CI\CD、Jenkins
Devops DevOps对应用程序发布的影响 在很多企业中,应用程序发布是一项涉及多个团队.压力很大.风险很高的活动.然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下 [2] : ...
- CI Weekly #6 | 再谈 Docker / CI / CD 实践经验
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- Docker / CI / CD
CI Weekly #6 | 再谈 Docker / CI / CD 实践经验 CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动 ...
- Azure Data Factory(三)集成 Azure Devops 实现CI/CD
一,引言 由于上一节文章内容过长,无法分享Azure Data Factory 的持续集成,持续发布.今天将着重介绍一下在使用 Azure DevOps Pipeline 发布,自动进行持续集成,并且 ...
- AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署
AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...
- 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...
- jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...
- 【Devops】【docker】【CI/CD】Jenkins源代码管理 添加gitlab项目地址,报错Failed to connect to repository : Error performing command: ls-remote -h git@192.168.92.130:8090/root/swapping.git HEAD
Jenkins源代码管理 添加gitlab项目地址 报错如下: Failed to connect to repository : Error performing command: ls-remot ...
- k8s Gitlab CI/CD 之自动编译Docker镜像并推送到指定的Registry
环境介绍: 说明 节点 ip 系统 Gitlab Server git.ds.com 10.0.1.179 CentOS 7.5.1804 Gitlab Runner 10.0.1.178 Cen ...
随机推荐
- 解决JavaFTP上传文件假死问题
之前使用ftp上传文件,代码很稳定,用了快三年,因为数据迁移,从搭建了ftp服务器,配置好ip和账号密码后,再使用之前代码发现: 在下载过程中,程序出现假死的现象,就是,既不报错,也不抛异常,还不终止 ...
- Scala工具库
1. Scala json解析库:https://github.com/json4s/json4s
- IDEA & Android Studio换主题背景
IDEA系列主题 http://www.riaway.com/index.phphttp://color-themes.com/?view=index 详细用法: https://www.jiansh ...
- 直接以管理员身份运行bat代码
https://www.cnblogs.com/dengpeng1004/p/7044441.html
- 话说 SVN 与 Git 之间的区别
如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...
- 使用Sublime Text 3的HTML-CSS-JS Prettify插件格式化代码
很多时候,我们想要格式化HTML-CSS-JS代码,网站上有很多实现此功能的小工具,当然,我的网站首页也有.但是,如果我们的代码编辑器上面也有这样的功能,那不是更加快速便捷?So,接下来,我们看看Su ...
- 【Java】 大话数据结构(18) 排序算法(5) (直接插入排序)
本文根据<大话数据结构>一书,实现了Java版的直接插入排序. 更多:数据结构与算法合集 基本概念 直接插入排序思路:类似扑克牌的排序过程,从左到右依次遍历,如果遇到一个数小于前一个数,则 ...
- jquery 点击页面流畅弹出预定文字
js代码: <script src="https://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script&g ...
- 【网站管理5】_讲解网站后台SEO优化和如何修改关键字以及关键词布局
讲解网站后台SEO优化和如何修改关键字以及关键词布局 制作:赖忠标 QQ:392277956 1.打开后台点击左侧边上的栏目,点击最后的系统-系统基本参数-站点设置 如下图 2.上图所改处 ...
- 理解JVM模型
概括 JVM运行时数据区可以划分为5部分,分别是:程序计数器.虚拟机栈.本地方法栈.堆.方法区 程序计数器(Program Counter Register) 相当于当前线程所执行字节码的行号指示器. ...