本文做者:CODING 用户 - 廖石荣php
如图所示:node
1.解放了重复性劳动。
自动化部署工做能够解放集成、测试、部署等重复性劳动,而机器集成的频率明显比手工高不少。
2.更快地修复问题。
持续集成更早的获取变动,更早的进入测试,更早的发现问题,解决问题的成本显著降低。
3.更快的交付成果。
更早发现错误减小解决错误所需的工做量。集成服务器在构建环节发现错误能够及时通知开发人员修复。集成服务器在部署环节发现错误能够回退到上一版本,服务器始终有一个可用的版本。
4.减小手工的错误。
在重复性动做上,人容易犯错,而机器犯错的概率几乎为零。
5.减小了等待时间。
缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间能够出现的等待时机。持续集成,意味着开发、集成、测试、部署也得以持续。
6.更高的产品质量。
集成服务器每每提供代码质量检测等功能,对不规范或有错误的地方会进行标致,也能够设置邮件和短信等进行警告。python
关于网上集成服务的工具不少,其中尤为以 Jenkins 服务最受欢迎,可是 Jenkins 服务须要在本身服务器上进行配置安装,以及安装各类插件,对于刚上手的小白来讲,可能存在必定的门槛,操做步骤繁多,操做不够智能,不是真正的自动化运维,缺乏一键发布构建服务。因此咱们选择了「CODING 持续集成」。git
「CODING 持续集成」是基于 Jenkins 的,兼容 Jenkinsfile 配置文件,若是您以前有使用过或者写过 Jenkinsfile 相信您会很快上手。web
「CODING 持续集成」是基于 Jenkins 的,经过 Jenkinsfile 配置文件完成 CI 的步骤,接下来将引导您一步步建立一个持续集成示例。shell
如图所示,集成步骤分为拉取代码-》构建-》测试-》部署等步骤,点击每一个步骤能够看到相应的命令执行状况,下面来一个一个步骤配合 Jenkinsfile 文件解释命令的一些执行状况:apache
代码工程结构如图所示:
缓存
1.检出项目,以下所示 Jenkinsfile 配置文件第一步经过 Git 检出在远程仓库分支的代码,至于哪一个分支能够经过环境变量配置读取 REF 这个环境变量tomcat
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 上面实现团队协做开发,一键部署做为团队以及公司文档共享社区论坛等做用。
本文适量引用:“持续集成”词条的百度百科