文档章节

Jenkins+Github+Docker+Maven实现持续集成

SilvaSong
 SilvaSong
发布于 2016/04/20 22:20
字数 1017
阅读 3445
收藏 125
点赞 2
评论 9

     持续集成的工具有很多,例如Jenkins、Strider、Drone.io等。我自身接触Jenkins比较多,在这里我就选选择Jenkins、Github、Docker来实现简单的实现持续集成。

    Github大家都应该非常了解一个非常好用的开源的代码托管平台,本文使用的示例源码就托管在github。

    Docker则是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。

    运行环境  ubuntu 14.04

    一、安装Jenkins

           ubunut下可以通过apt-get方式安装Jenkins. 

sudo apt-get update
sudo apt-get install jenkins

            Jenkins默认使用的是8080端口,安装完成后浏览器访问 http://192.168.0.1:8080(ip换成你自己的)看到下面的页面证明安装成功.

   

       Jenkins安装过程中会在系统中默认创建一个Jenkins用户,Jenkins会使用该用户来执行构建脚本。因为Jenkins用户权限问题会导致一些未知的错误.建议使用root用户来执行Jenkins构建脚本.

       可以通过修改/etc/default/jenkins 让默认的用户为root。    

# user and group to be invoked as (default to jenkins)
#JENKINS_USER=$NAME
JENKINS_USER=root
#JENKINS_GROUP=$NAME
JENKINS_GROUP=root

 二、安装docker

      ubunut下也可以通过apt-get方式安装docker. 还有很多安装方式具体可以参考下docker官方文档https://docs.docker.com/engine/installation/linux/ubuntulinux/

sudo apt-get update
sudo service docker start

三、安装Jenkins github插件

    因为选择的是github作为代码托管工具,需要给jenkins安装Github Plugin。

    安装步骤: 访问Jenkins--> 系统管理 -->管理插件-->安装Github Plugin

     配置github用户认证信息(必须要配置否则无法正常下载源码)

      配置步骤: 系统管理 -->系统配置

      点击ADD添加认证信息.

      

四、创建Jenkins作业

       1)  单击新建连接

       2)填写作业名称、选择 构建一个自由风格的软件项目 .    

           

        3) 添加GitHub project

         

       4) 配置源码管理

           源码管理方式选择git,添加github仓库和认证信息.

           

      5)增加构建步骤  execute shell

          通过shell脚本来实现docker镜像的创建,以及使用Maven打包项目war包,启动tomcat服务器.

docker build -t cijd .    #构建cijd镜像
if [ -n $(awk $(docker ps -a -q))]
 then
 docker rm -f $(docker ps -a -q)  #删除历史纪录
fi
docker run -d -p 8888:8080 cijd  #部署镜像指定宿主机8888端口转发到docker容器中tomcat 8080端口

       6)运行一次构建

         点击立即构建,控制台输出如下内容表示构建成功.

 ---> 169dc0859a28
Step 18 : EXPOSE 8080
 ---> Using cache
 ---> 876fbcc5db60
Step 19 : CMD ./var/tmp/tomcat/apache-tomcat-8.0.33/bin/catalina.sh run
 ---> Using cache
 ---> 02300f000731
Successfully built 02300f000731
+ docker ps -a -q
+ awk 42ee1ea78bdf
+ [ -n ]
+ docker ps -a -q
+ docker rm -f 42ee1ea78bdf
42ee1ea78bdf
+ docker run -d -p 8888:8080 cijd
829e25f7bf0e32720f2cf292d48dc74aa3fef6e02271911ba6015c8421e5ee08Finished: SUCCESS

 

通过访问  http://192.168.0.1:8080/CIJD 你可以看到示例项目已经部署成功.

五、示例代码.

    示例代码地址: https://github.com/silvasong/CIJD ,如果不想自己新建项目可以fork。

    另外介绍下dockerfile文件,了解docker都应该知道dockerfile是构建docker镜像的关键.

FROM ubuntu:latest
MAINTAINER Silva Song "silva.song@aliyun.com"

#安装JDK
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk && apt-get install -y wget

#安装tomcat
RUN mkdir /var/tmp/tomcat
RUN wget -P /var/tmp/tomcat http://mirrors.noc.im/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz
RUN tar xzf /var/tmp/tomcat/apache-tomcat-8.0.33.tar.gz -C /var/tmp/tomcat
RUN rm -rf /var/tmp/tomcat/apache-tomcat-8.0.33.tar.gz 

#安装maven
RUN mkdir /var/tmp/maven
RUN wget -P /var/tmp/maven http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
RUN tar xzf /var/tmp/maven/apache-maven-3.3.9-bin.tar.gz -C /var/tmp/maven
RUN rm -rf /var/tmp/maven/apache-maven-3.3.9-bin.tar.gz
#设置maven环境变量
ENV MAVEN_HOME=/var/tmp/maven/apache-maven-3.3.9
ENV PATH=$MAVEN_HOME/bin:$PATH


#打包示例项目并拷贝到tomcat webapps目录
RUN mkdir /var/tmp/webapp
ADD ./ /var/tmp/webapp
RUN cd /var/tmp/webapp && mvn package && cp /var/tmp/webapp/target/CIJD.war /var/tmp/tomcat/apache-tomcat-8.0.33/webapps

EXPOSE 8080
#启动tomcat服务器
CMD ["./var/tmp/tomcat/apache-tomcat-8.0.33/bin/catalina.sh","run"]

© 著作权归作者所有

共有 人打赏支持
SilvaSong
粉丝 4
博文 7
码字总数 5389
作品 0
成都
后端工程师
加载中

评论(9)

YOU不可或缺
YOU不可或缺
我想问下 jenkins打包后war在哪里? war包怎么转移放到了docker的tomcat里面 这个过程能讲下吗?
O_King
O_King
如果这样构建的话,docker容器会不会很庞大?因为maven的整个仓库都在容器之内!
zhyan099
zhyan099
你好,初学docker,向你请教个问题,dockerfile文件放在哪个位置?
SilvaSong
SilvaSong

引用来自“zhf_sy”的评论

写的不够完整啊
你什么地方不懂么~
zhf_sy
zhf_sy
写的不够完整啊
SilvaSong
SilvaSong

引用来自“蔡镭”的评论

jenkins,buildbot都是持续集成工具,docker和他们不是一类
不好意思写错了~ 谢谢指出 ,应该是Drone.io。
蔡镭
蔡镭
jenkins,buildbot都是持续集成工具,docker和他们不是一类
SilvaSong
SilvaSong

引用来自“12叔”的评论

这个我刚写过了。。
最近刚好看书看到~就学习顺便记录了下来~
12叔
12叔
这个我刚写过了。。
6.2、 产品经理甩锅指南-CI环境

上次在这里提到了敏捷开发scrum,6、产品经理和包工头的故事,敏捷开发背景下,还有CI(持续集成)环境,持续交付和持续部署。 小奈:今天捅了个篓子,我只是叫开发,修改个导航栏而已。 也测试...

产品经理的技术课堂 ⋅ 06/01 ⋅ 0

基于Jenkins 快速搭建持续集成环境

持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile)...

openthings ⋅ 2015/12/09 ⋅ 0

fir.im weekly - 「 持续集成 」实践教程合集

我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集成系统的经验,...

风起云飞fir_im ⋅ 2016/05/09 ⋅ 0

《持续交付-发布可靠软件的系统方法》读书笔记-持续集成

《持续交付-发布可靠软件的系统方法》全书51.2万字,15章,384页。本次阅读第三章持续集成,大概42页。 持续交付 持续集成最早出现在Kent Beck写的《解析极限编程》一书中,主要思想:既然经...

转型实践者 ⋅ 2017/11/25 ⋅ 0

对于持续集成实践的常见问题的解答

我之前总结了一下自己在做咨询时辅导团队时遇到的问题,并且给出了相应解答。 Q1:什么是持续集成? 集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构成一个有机整体...

ThoughtWorks中国 ⋅ 2017/11/27 ⋅ 0

云计算持续集成的优势WiseCloud睿云智合最新科技

睿云智合WiseCloud平台能同时支持多种主流容器集群编排调度管理平台,在帮助金融企业用户规避容器底层框架技术路线选择风险上,带来很大灵活性,我们提供给用户充分技术保障。

光辉岁月op ⋅ 2017/12/15 ⋅ 0

详解CI、CD & CD

详解CI、CD & CD 运维生存时间 - 运维生存时间2017-12-094 阅读 cidevops 发表评论 A+ 所属分类: 业界动态 CI, CD AND CD 当我们在谈论现代的软件编译和发布流程的时候,经常会听到CI 和CD这...

运维生存时间 - 运维生存时间 ⋅ 2017/12/09 ⋅ 0

基于 Ant 搭建敏捷开发过程中的持续集成环境

基本的持续集成环境 一个持续、稳定的构建是整个持续集成过程中的关键。在每个迭代周期的开发过程中,软件开发团队应当及时将最新的功能代码进行提交和构建,以便 使软件测试团队能够进行功能...

红薯 ⋅ 2009/12/31 ⋅ 0

谈谈持续集成,持续交付,持续部署之间的区别

经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢? 假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 正如你在上图中看到,...

风起云飞fir_im ⋅ 2016/08/04 ⋅ 0

为什么我们迫切需要持续集成(Continuous Integration)

原文同步至 https://waylau.com/why-we-need-continuous-integration/ 持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础。本文论述了当前软件开发过程...

waylau ⋅ 2016/12/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 21分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部