关键词:
本文作者:CODING 用户 - 廖石荣
持续集成的概念
持续集成的模式
如图所示:
- CI 过程:代码编写 -> 源代码库(GitHub or gitlab)-> CI 服务器(代码构建、自动化测试、结果反馈【构建结果】)
- 涉及 CI 工具:Jenkins、Travis CI、TeamCity、Gitlab CI、CircleCI、Codeship 等,相关资料可以查询对应的官网,其中应用广泛的 Jenkins 和 Travis CI,市场上也推出了智能化的持续集成服务商,比如「CODING 持续集成」,它是基于 Jenkins 配置集成服务,真正实现了一键提交代码,持续集成,部署服务。
持续集成的优点
1.解放了重复性劳动。
自动化部署工作可以解放集成、测试、部署等重复性劳动,而机器集成的频率明显比手工高很多。
2.更快地修复问题。
持续集成更早的获取变更,更早的进入测试,更早的发现问题,解决问题的成本显著下降。
3.更快的交付成果。
更早发现错误减少解决错误所需的工作量。集成服务器在构建环节发现错误可以及时通知开发人员修复。集成服务器在部署环节发现错误可以回退到上一版本,服务器始终有一个可用的版本。
4.减少手工的错误。
在重复性动作上,人容易犯错,而机器犯错的几率几乎为零。
5.减少了等待时间。
缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间可以出现的等待时机。持续集成,意味着开发、集成、测试、部署也得以持续。
6.更高的产品质量。
集成服务器往往提供代码质量检测等功能,对不规范或有错误的地方会进行标致,也可以设置邮件和短信等进行警告。
持续集成服务的选择
关于网上集成服务的工具很多,其中尤其以 Jenkins 服务最受欢迎,但是 Jenkins 服务需要在自己服务器上进行配置安装,以及安装各种插件,对于刚上手的小白来说,可能存在一定的门槛,操作步骤繁多,操作不够智能,不是真正的自动化运维,缺少一键发布构建服务。所以我们选择了「CODING 持续集成」。
CODING 提供的集成服务是什么
「CODING 持续集成」是基于 Jenkins 的,兼容 Jenkinsfile 配置文件,如果您之前有使用过或者写过 Jenkinsfile 相信您会很快上手。
如何使用CODING持续集成服务
「CODING 持续集成」是基于 Jenkins 的,通过 Jenkinsfile 配置文件完成 CI 的步骤,接下来将引导您一步步创建一个持续集成示例。
- 登录 CODING,进入项目中心,点击左边菜单集成服务,开通集成服务,配置完成之后会手动触发第一次构建过程。
- 找到或者创建 Jenkinsfile,如果你对于 Jenkins 比较熟悉的话,可以自己编写 Jenkinsfile 配置文件,也可以采用 CODING 提供的模板文件,如下我就采用了 Jenkinsfile 模板文件来实行自动化持续集成服务,您可以在修改 Jenkinsfile 的时候修改触发方式,您可以自行选择是推送到某个标签或者某个分支时间触发构建。Jenkins 以及能够为 agent 默认配置好 timezone 和 localtime (默认中国上海)。
- 配置好 Jenkinsfile 文件以及配置好环境变量,点击保存,便可以进行持续集成项目了。
如图所示,集成步骤分为拉取代码-》构建-》测试-》部署等步骤,点击每个步骤可以看到相应的命令执行情况,下面来一个一个步骤配合 Jenkinsfile 文件解释命令的一些执行情况:
代码工程结构如图所示:
1.检出项目,如下所示 Jenkinsfile 配置文件第一步通过 Git 检出在远程仓库分支的代码,至于哪个分支可以通过环境变量配置读取 REF 这个环境变量
stage("检出") {
steps {
sh ‘ci-init‘
checkout(
[$class: ‘GitSCM‘, branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
如上图所示,第一步主要是执行从 Git 仓库远程拉取代码,所以命令都是 Git 里面的,包括读取 Git 配置的环境变量包括更新 Jenkinsfile 文件
2.构建项目,如下命令所示构建这一步主要是初始化代码和打包代码,因为我们这个工程是以 Java 为主要开发语言,所以重点关注 Java 版本和安装 Maven 命令即可打包,目前 CODING 提供的语言环境包括了 java-1.8.0_181, go-1.7.4, node-10.11.0, php-7.0.30, ruby-2.3, python-2.7.13 等。如有需要可以联系客服开通其它语言环境。
stage("构建") {
steps {
echo "构建中..."
sh ‘go version‘
sh ‘node -v‘
sh ‘java -version‘
// sh ‘php -v‘
// sh ‘python -V‘
// sh ‘gcc -v‘
// sh ‘make -v‘
// 请在这里放置您项目代码的单元测试调用过程,例如:
sh ‘mvn clean‘ // mvn 清除缓存
sh ‘mvn install‘ // 构建 Maven 工程
// sh ‘make‘ // make 示例
echo "构建完成."
// archiveArtifacts artifacts: ‘**/target/*.jar‘, fingerprint: true // 收集构建产物
}
}
因为这个 SpringBoot 项目是以 Java 为主的项目,所以在 Jenkinsfile 文件命令里面其实可以把其它语言的检查版本命令去掉,只需要执行 java -version 命令即可。
第一次构建失败:
如上图所示,第一次执行执行构建 jar 包失败,因为在本地可以正常 mvn install,所以起初我百思不得其解,上网找了很多资料,经过多番查找,最后在 Stack Overflow 找到了答案,这是由于 OpenJDK 1.8.0_181 这个版本中存在的一个 bug 所致,原文如下:链接最终解决方案采用更改 pom.xml 文件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<skipTests>true</skipTests>
</configuration>
</plugin>
成功构建结果如下:
3.测试项目,如下所示,我们 SpringBoot 工程通过 mvn test 测试命令即可,比如下面我们测试其中一个用户信息相关的单元测试:
stage("测试") {
steps {
echo "单元测试中..."
// 请在这里放置您项目代码的单元测试调用过程,例如:
sh ‘mvn test -Dtest=com.my.cnblog.website.Pwdtest‘ //测试其中一个单元测试
echo "单元测试完成."
}
}
第一次失败测试结果如下:
后来经检查,是单元测试代码其中存在 bug,修正之后,正确的第二次测试结果如下:
4.部署项目,如下所示,部署项目命令可以执行自己写的部署脚本文件。各位可以结合自己项目的真实环境,编写简单的部署脚本,比如上传 jar 包到服务器,然后通过 java - jar XXXX.jar 包执行方式,以及上传 war 包到 tomcat 服务器,然后启动 tomcat 服务器等,也可以结合自己公司项目需要编写复杂的执行脚本文件,然后调用执行脚本命令,比如下面举一个简单的执行脚本例子。
部署命令:
stage("部署") {
steps {
echo "部署中..."
sh ‘./deploy.sh start‘ // 启动 tomcat 服务
// sh ‘./deploy.sh stop‘ // 停止 tomcat 服务
echo "部署完成"
}
}
deploy.sh 脚本:(其中一些 tomcat 服务路径配置根据自己需要进行修改)
#!/bin/bash
tomcat_home=/usr/tomcat/apache-tomcat-8.0.48 //修改为自己服务器的 tomcat 路径
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
case $1 in
start)
echo "启动$tomcat_home"
$STARTTOMCAT
;;
stop)
echo "关闭$tomcat_home"
$SHUTDOWN
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk ‘{print $2}‘`
kill -9 $pidlist
#!/bin/bash
tomcat_home=/usr/tomcat/apache-tomcat-8.0.48
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
case $1 in
start)
echo "启动$tomcat_home"
$STARTTOMCAT
;;
stop)
echo "关闭$tomcat_home"
$SHUTDOWN
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk ‘{print $2}‘`
kill -9 $pidlist
stop)
echo "关闭$tomcat_home"
$SHUTDOWN
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk ‘{print $2}‘`
kill -9 $pidlist
#删除日志文件,如果你不先删除可以不要下面一行
rm $tomcat_home/logs/* -rf
#删除tomcat的临时目录
rm $tomcat_home/work/* -rf
;;
restart)
echo "关闭$tomcat_home"
$SHUTDOWN
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk ‘{print $2}‘`
kill -9 $pidlist
#删除日志文件,如果你不先删除可以不要下面一行
rm $tomcat_home/logs/* -rf
#删除tomcat的临时目录
rm $tomcat_home/work/* -rf
sleep 5
echo "启动$tomcat_home"
$STARTTOMCAT
#看启动日志
#tail -f $tomcat_home/logs/catalina.out
;;
logs)
cd /mnt/alidata/apache-tomcat-7.0.68/logs
tail -f catalina.out
;;
esac
服务启动展示
系统主页如下图所示:
文章详情如下图所示:
归档页面如下图所示:
系统后台管理如图所示:
总结
CODING 是一个面向开发者的云端开发平台,提供 Git/SVN 代码托管、任务管理、在线 WebIDE、Cloud Studio、开发协作、文件管理、Wiki 管理、提供个人服务及企业服务,其中实现了 DevOps 流程全自动化,为企业提供软件研发全流程管理工具,打通了从团队构建、产品策划、开发测试到部署上线的全过程。「CODING 持续集成」集成了 Jenkins 等主流企业开发流程工具,如上所示,这个以 SpringBoot 打造的 CMS 社区系统便可以在 CODING 上面实现团队协作开发,一键部署作为团队以及公司文档共享社区论坛等作用。
本文适量引用:“持续集成”词条的百度百科
云原生devops:cicd持续集成|交付|部署
@TOC基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署一、持续集成为了让程序代码可以自动推送到测试环境基于Do... 查看详情
linux服务器中jenkins集成gitgradle持续构建springboot项目
...nux服务器中使用Jenkins自动发布一个可作为linux服务发布的Springboot项目。自动构建需要经过如下步骤:从git仓库下载代码、使用Gradle进行构建、使用SSH推送到另一台linux服务器、项目作为linux服务启动。本章将逐条仔细讲解。一、... 查看详情
springboot和vue集成视频播放组件——基于springboot和vue的后台管理系统项目系列博客(二十二)(代码片段)
系列文章目录系统功能演示——基于SpringBoot和Vue的后台管理系统项目系列博客(一)Vue2安装并集成ElementUI——基于SpringBoot和Vue的后台管理系统项目系列博客(二)Vue2前端主体框架搭建——基于SpringBoot和Vue的后... 查看详情
基于jenkins快速搭建持续集成环境
基于Jenkins快速搭建持续集成环境jenkins+maven+svn+tomcat自动部署Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。1.... 查看详情
基于jenkins+docker+git持续化自动部署项目(详细版一));(代码片段)
...集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。官网:https://jenkins.io/官方文档:https://jenkins.io/doc/通过命... 查看详情
jenkins持续集成springboot
1、可以配置项目标签2、代码地址,这里并没有拉取制定标签的代码,而是拉取了最新版本代码,如果要拉取指定标签代码需要把*/master修改成$version_tag。3、PreSteps与Build,通过PreSteps修改pom.xml的版本,一次构建一个版本,版本规... 查看详情
使用jenkins持续化集成springboot(代码片段)
...减少运维的工作量,此篇文章将介绍如何持续化部署springboot项目。1.jenkens持续化部署的原理持续化部署的原理很简单,就是首先到你提供的svn/git上下载代码,然后获取配置的打包语句,打成jar包。然后使用ssh连... 查看详情
jenkins集成springboot持续化构建代码
... 我个人使用的是阿里云的云服务器,项目采用的是springboot为框架,现在要做的功能就是将本地开发的代码提交到github中,通过jenkins自动化集成部署到云服务器。接下来开始步骤。1首先是在服务器上安装必要的软件,jenkin... 查看详情
travisci用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目工具:[email protected]:~$ node [email protected]:~$ git --versiongit version [email protected]:~$ travis --version1.8.4Travis 查看详情
android开发基于jenkins实现持续集成(代码片段)
Jenkins简介Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时Jenkins能实现监控集成中存在的错误,提供详细的日志文件和提... 查看详情
coding敏捷实战系列课第四讲:从头搭建持续集成devops流水线
...程学院高级讲师、CODING特邀敏捷顾问李小波老师主讲,将基于CODING展示如何编写Jenkinsfile搭建CI/CD流水线,包括单元测试,端到端测试,代码规范检查,制品库,Docker化部署。大家好,今天课程的主要内容为如何从头搭建DevOps流... 查看详情
jenkins部署与备份恢复实战(代码片段)
一、关于JenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能!先了解下相关概念:CI:continuousintegration持续集成(code--buli... 查看详情
持续集成jenkins+sonarqube部署教程
...引言1.1文档概要本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建。用一个例子介绍jenkins的编译打包部署,代码检查。最后集成jenkins。(现阶段只是简易的集成,后续需要修改accio源码做深度集成)1.2预计读者系统配置... 查看详情
剑指架构师系列-持续集成之maven+nexus+jenkins+git+springboot
1、Nexus与Maven 先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要粘贴个Jar包的地址,Maven就会自动到... 查看详情
jenkins持续集成
...的软件版本发布/测试项目2监控外部调用工具3jenkins就是基于Java开发的一种持续集成的工具4可以将运维用到的各个脚本整合起来,并且可以通过页面方式集中管理,而且可以也可以实现和gitlab、github交互,也可以实现自动编译、... 查看详情
持续集成之jenkins2
...概览 什么是Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 安装Jenkins(不和git安装在同一台主机... 查看详情
jenkins+gitlab实现持续集成(代码片段)
...易用的软件平台,使软件的持续集成变成可能。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1)持续的软件版本发布/测试项目;2)监控外部调用执行的工作;对Jenkins有兴趣的朋友可以参考Jen... 查看详情
怎么使用coding提供的webhook做持续集成测试的么
参考技术A我们用了Jenkins,但Coding也不用了。因为需要把搭建的Jenkins需要暴露到外网,考虑到安全性问题,就内网搭了个gitlab,配合Jenkins用 查看详情