Docker搭建Jenkins+Gogs+Maven/Gradle——代码自动化运维部署平台(三)
一、简介
1、CI/CD
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。
CI 持续集成(Continuous Integration)
现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。这是因为当一位独立工作的开发人员对应用进行更改时,有可能会与其他开发人员同时进行的更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。
持续集成(CI)可以帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。
CD 持续交付(Continuous Delivery)
完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI 已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。
在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。
CD 持续部署(Continuous Deployment)
对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。
实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期投资还是会很大。
2、自动化部署流程(jenkins+gogs+maven/gradle)
我们的初衷:
就是要实现只要开发提交代码到git远程仓库,jenkins就会自动检测到并且自动进行构建(合并、打包),构建完成之后将打好的包(war、jar包都可以)通过jenkins的插件传到tomcat的webapps目录下,然后重启tomcat,实现自动打包部署。
其工作流程是:
开发提交代码到gogs远程仓库——>使用jenkins触发构建任务,git插件从gogs仓库上拉取代码——>maven/gradle将代码编译打包——>jenkins将war包部署到tomcat/将jar包放到服务器
3、搭建前环境准备
1、搭建gogs代码仓库,192.168.1.20
2、搭建jenkins+maven/gradle,192.168.1.20
3、tomcat服务(jenkins将war包放到tomcat运行)
4、应用程序服务器:192.168.1.30
二、Jenkins构建maven项目
1、新建maven项目

打开新建的test项目,进行配置

2、配置maven项目的构建操作
保存构建历史,可以方便查看构建历史所用分支等信息:


配置git parameter插件,选择指定分支进行构建的功能。后面的git参数名称可以自定义:


配置jdk parameter插件,可以指定一组可作为构建参数选取的JDK:


源码管理, 配置git仓库地址等信息:



指定分支,跟git参数的自定义名称对应:

配置maven工具操作:

maven命令:mvn clean install -Dmaven.test.skip=true
clean 移除所有上一次构建生成的文件
install 将包安装至本地仓库,以让其它项目依赖
maven.test.skip 跳过测试
3、配置程序包发送到应用服务器
情况一:构建jar包通过配置SSH发送文件到服务器:(Publish over SSH插件 使用ssh免密登录到目标服务器)
系统管理——>系统配置——>publish over ssh——>SSH Server——>添加目标服务器信息——>测试是否正确



在Post Steps配置里添加选项 Send files or execute commands over SSH,并配置图示信息:


Source files #jenkins项目工作区中jar包路径 eg:mall-admin/target/mall-admin-1.0-SNAPSHOT.jar
Remove prefix #删除jar包路径的前缀 eg:mall-admin/target/
Remote directory #将jar包放到应用服务器的目录地址
Exec command #应用服务器执行命令。可以执行命令,可以执行脚本,也可以在应用服务器写好shell脚本执行。
完整的程序运行脚本,只需修改变量值就可以为你所用:
#自定义变量
DATE=$(date +%Y%m%d%T)
JAVADIR=/usr/local/jdk1.8.0_171
PROJECT=mall-admin
DIR=/server/jenkins
SOFTDIR=$DIR/soft
TEMPDIR=$DIR/temp
LOGSDIR=$DIR/logs
BACKUPDIR=$DIR/backup
JARFILE=$PROJECT-1.0-SNAPSHOT.jar
PID=$LOGSDIR/$PROJECT/$PROJECT.pid
LOGS=$LOGSDIR/$PROJECT/$PROJECT.log #创建应用服务器目录
mkdir -p $DIR/{logs,soft,backup}
if [ ! -d $LOGSDIR/$PROJECT ];then
mkdir -p $LOGSDIR/$PROJECT
fi #程序启动、停止、备份
cd $SOFTDIR
kill -9 `cat $PID`
mv $JARFILE $BACKUPDIR/$JARFILE.$DATE
mv $LOGS $LOGS.$DATE
mv -f $TEMPDIR/$JARFILE .
$JAVADIR/bin/java -jar -Dspring.profiles.active=test $JARFILE >$LOGS & echo $! > $PID
if [ $? = 0 ];then
sleep 30
tail -n 50 $LOGS
fi #清理多余日志
cd $LOGSDIR/$PROJECT
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
情况二:构建war包放到tomcat中运行
#docker搭建tomcat
启动测试tomcat:
docker run -itd -p 8080:8080 --name=tomcat tomcat
拷贝配置文件到宿主机:
docker cp tomcat:/usr/local/tomcat /server/docker/
可以修改tomcat配置文件(server.xml): 自定义端口等
删除测试,启动正式tomcat:
docker rm -f tomcat
docker run --restart=always --name=tomcat -p 8080:8080 \
-v /server/docker/tomcat:/usr/local/tomcat \
-itd tomcat
在"构建后操作"添加Deploy war/ear to a container 选项,让war包放到tomcat的webapps目录下,程序就能运行起来了。

修改tomcat配置文件,允许jenkins访问:
vim /server/docker/tomcat/config/tomcat-users.xml #管理员密码为:tomcat/tomcat
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
vim /server/docker/tomcat/webapps/manager/META-INF/context.xml
如下图修改,将这段话注销,让所以ip都可以访问tomcat,修改完重启tomcat:docker restart tomcat

4、指定分支构建项目
配置完成后,指定代码分支构建项目

到应用服务器或者jenkins查看日志,是否构建成功,如果没有构建成功,可从日志里找问题并解决。


打开"控制台输出",就能看到构建项目输出的日志了。
三、Jenkins构建gradle项目
其实构建maven项目和gradle项目步骤是一样,只是有几点不同,有了构建maven项目的基础,接下来就简单多了。
1、新建一个自由风格项目

注意:接下来的配置跟构建maven项目一样,不同是的maven项目需要配置maven工具操作,gradle项目需要配置gradle工具操作
2、配置gradle工具打包编译操作
只有这两步跟maven不一样,其他都参考 “二、jenkins构建maven项目” 来配置,这里就不多说了~
四、Jenkins其他功能
1、用户权限管理,实现不同用户拥有不同的项目增删改查权限
持续更新中......
2、jenkins+docker 微服务部署到docker容器中
持续更新中......
3、jenkins+Sonarqube 构建前审查代码
持续更新中......
活着不为取悦任何人
Docker搭建Jenkins+Gogs+Maven/Gradle——代码自动化运维部署平台(三)的更多相关文章
- Docker搭建Jenkins+Maven/Gradle——代码自动化运维部署平台(二)
一.简介 1.Jenkins 概述: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins ...
- Docker搭建Gogs代码仓库——代码自动化运维部署平台(一)
一.准备工作 1.Gogs 概念: Gogs 是一款极易搭建的自助 Git 服务. 目的: Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Go ...
- 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx
↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...
- Linux自动化运维部署+运维
自动化部署及配置(Cobbler/Kickstart) 红帽发布的网络安装服务器套件 Cobbler可以说是一大Linux装机利器,可以快速的建立网络安装环境,据说比Kickstart还要好用. 分布 ...
- Python自动化运维开发实战 三、python文件类型
导语: python常用的有3种文件类型 1. 源代码 py 2. 字节代码 pyc 3. 优化代码 pyo 源代码: python源代码的文件以”py"为扩展名,由python程序解释,不 ...
- Python自动化运维 - Django(三)CSRF - Cookie&Session
CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求 ...
- 轻量级自动化运维工具Fabric的安装与实践
一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...
- Telegraf+Influxdb+Grafana自动化运维监控
概述:Telegraf收集信息,influxdb时序数据库存储数据,grafana平台展示数据,并进行监控告警,组成一个自动化运维监控平台. 一.influxdb InfluxDB是一个由Infl ...
- 【目录】Python自动化运维
目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...
随机推荐
- Linux 系统中如何查看日志 (常用命令) tail -f
Linux 系统中如何查看日志 (常用命令) tail -f 日志文件 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日 ...
- 联想 lenove 3750 M4服务器更改启动项和管理口IP
联想 lenove 3750 M4服务器更改启动项和管理口IP 注: 因为在机房拍照的原因,再加上工作比较忙:整理成文档的时候有的过程已经忘记了,所以有的步骤可能会缺失,里面的选项都已经用中文方式表达 ...
- 060.Python组件-中间件
一 中间件基本介绍 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会 ...
- IDEA Git 项目实战场景
实战场景一:上班啦,从远程仓库克隆项目到本地仓库(Clone) 打开 IDEA,在 Check out from Version Control 下拉菜单选择 Git,如下: 在弹出窗口的 URL 地 ...
- Java枚举类与注解详解——一篇文章读懂枚举类与注解详
目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...
- 程序员与年龄:四十岁普通开发、三十五岁首席架构、三十岁基层Leader
最近,有一个词儿特别热门--躺平.有没有人跟你说过:"躺平说起来容易,做起来更容易." 和躺平相对的是另外一个词--内卷,群聊的时候,已经很多次看过草卷起来了.jpg表情包.某些节 ...
- docker部署安装流程第一版
docker部署安装流程第一版 1.以Dockerfile的方式进行构建docker 以cloud 新联盟为例 dockerfile from hub.c.163.com/library/maven ...
- Go语言网络通信---tcp群发消息
server package main import ( "fmt" "net" "os" "time" ) func ...
- 201871030132-熊文婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- SpringCloud Alibaba实战(3:存储设计与基础架构设计)
1.存储设计 在上一章中,我们已经完成了基本业务流程的梳理和服务模块的划分,接下来,开始设计数据存储. 虽然在微服务的理论中,没有对数据库定强制性的规范,但一般,服务拆分之后,数据库也会对应的拆分. ...