一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/



一步一步用jenkins,ansible,supervisor打造一个web构建发布系统。

本来应该还有gitlab这一环节的,但是感觉加上,内容会增加很多。所以直接用github上的spring-mvc-showcase项目来做演示。

https://github.com/spring-projects/spring-mvc-showcase

本文的环境用docker来构建。当然也可以任意linux环境下搭建。

如果没有安装docker,可以参考官方的文档:
https://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit

下面将要介绍的完整流程是:

  1. github作为源代码仓库
    • jenkins做为打包服务器,Web控制服务器
    • ansible把war包,发布到远程机器
      1. 安装python-pip
      2. 用pip安装supervisor
      3. 安装jdk
      4. 下载,部署tomcat
      5. 把tomcat交由supervisor托管
      6. 把jenkins生成的war包发布到远程服务器上
      7. supervisor启动tomcat
      8. 在http端口等待tomcat启动成功
    • supervisor托管app进程,提供一个web界面可以查看进程状态,日志,控制重启等。

在文章的最后,会给出一个完整的docker镜像,大家可以自己运行查看实际效果。

安装jenkins

  • 先用docker来启动一个名为“jenkins”的容器:
sudo docker run -i -t -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' ubuntu /bin/bash

8080是jenkins的端口,8101是spring-mvc-showcase的端口,9001是supervisor的web界面端口

执行完之后,会得到一个container的shell。接着在这个shell里安装其它组件。

  • 安装open jdk 和 git:
sudo apt-get update
sudo apt-get install openjdk-7-jdk git
  • 下载配置tomcat:
apt-get install wget
mkdir /opt/jenkins
cd /opt/jenkins
wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.18/bin/apache-tomcat-8.0.18.tar.gz
tar xzf apache-tomcat-8.0.18.tar.gz
  • 安装jenkins:
cd /opt/jenkins/apache-tomcat-8.0.18/webapps
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
rm -rf ROOT*
mv jenkins.war ROOT.war
  • 启动jenkins:
/opt/jenkins/apache-tomcat-8.0.18/bin/startup.sh

然后在本机用浏览器访问:http://localhost:8080/ ,可以看到jenkins的界面了。

配置jenkins

安装git插件

安装git插件:
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

在“系统管理”,“插件管理”,“可选插件”列表里,搜索“Git Plugin”,这样比较快可以找到。

因为jenkins用google来检查网络的连通性,所以可能在开始安装插件时会卡住一段时间。

配置maven, java

打开 http://localhost:8080/configure
在jenkins的系统配置里,可以找到maven,git,java相关的配置,只要勾选了,在开时执行job时,会自动下载。

JDK可以选择刚才安装好的openjdk,也可以选择自动安装oracle jdk。

Git会自动配置好。

配置ssh服务

安装sshd服务:

sudo apt-get install openssh-server sshpass

编辑
vi /etc/ssh/sshd_config

PermitRootLogin without-password

改为:

PermitRootLogin yes

重启ssh服务:

sudo /etc/init.d/ssh restart

为root用户配置密码,设置为12345:

passwd

最后尝试登陆下:

ssh root@127.0.0.1

安装ansible

在jenkins这个container里,继续安装ansible,用来做远程发布用。

先安装pip,再用pip安装ansible:

sudo apt-get install python-pip python-dev build-essential git
sudo pip install ansible

配置ansible playbook

把自动发布的ansible playbook clone到本地:

https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

mkdir -p /opt/ansible
cd /opt/ansible
git clone https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

在jenkins上建立deploy job

  • 新建一个maven的项目/job,名为spring-mvc-showcase
  • 在配置页面里,勾选“参数化构建过程”,再依次增加“String”类型的参数

共有这些参数:

    app    要发布的app的名字
    http_port     tomcat的http端口
    https_port  tomcat的https端口
    server_port tomcat的server port
    JAVA_OPTS    tomcat启动的Java参数
    deploy_path   tomcat的目录
    target_host  要发布到哪台机器
    war_path       jenkins生成的war包的目录
  • “源码管理”,选择Git,再填入代码地址

https://github.com/spring-projects/spring-mvc-showcase.git

  • 在“Post Steps”里,增加调用ansible playbook的shell命令
cd /opt/ansible/jenkins-ansible-supervisor-deploy
ansible-playbook -i hosts site.yml --verbose --extra-vars "target_host=$target_host app=$app http_port=$http_port https_port=$https_port server_port=$server_port deploy_path=$deploy_path JAVA_HOME=/usr JAVA_OPTS=$JAVA_OPTS deploy_war_path=$WORKSPACE/$war_path"

最后,保存。

测试构建

一切都配置好之后,可以在jenkins界面上,在左边,选择“Build with Parameters”,“开始”来构建项目了。

如果构建成功的话,就可以打开 http://localhost:8101 ,就可以看到spring-mvc-showcase的界面了。

打开 http://localhost:9001 可以看到superviosr的控制网页,可以查看tomcat进程的状态,重启,查看日志等。

如果想要发布到其它机器上的话,只要在


/opt/ansible/jenkins-ansible-supervisor-deploy/hosts

文件里增加相应的host配置就可以了。

其它的一些东东

如果提示

to use the 'ssh' connection type with passwords, you must install the sshpass program

则安装:

sudo apt-get install sshpass

演示的docker image

如果只是想查看实际运行效果,可以直接把 hengyunabc/jenkins-ansible-supervisor 这个image拉下来,运行即可。

docker run -it -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' hengyunabc/jenkins-ansible-supervisor

总结

  • jenkins提供了丰富的插件,可以定制自己的打包这过程,并可以提供完善的权限控制
  • ansible可以轻松实现远程部署,配置环境等工作,轻量简洁,功能强大
  • supervisor托管了tomcat进程,提供了web控制界面,所有运行的程序一目了然,很好用
时间: 2024-10-29 00:52:51

一步一步用jenkins,ansible,supervisor打造一个web构建发布系统的相关文章

一步一步轻松搞定您的个人数码免冠照

应用目标:制作证件照片 使用软件:Photoshop 7.0(其他版本操作类似) 实现难度:即学即会 相信许多朋友都有这样的经历:填写应聘表.考个驾照或是办个工作证经常会用到免冠照,可每次都想不起来上回留下的底(照)片放在哪里,回到家里翻天覆地地一阵好找,结果常常是无功而返,最后只好一边抱怨自己记性不好一边梳妆打扮走进照相馆,一番讨价还价之后,然后极不情愿地把银子数给照相馆老板,到了下回这样的情形依然会重现.要是我们做好一个无需底片的数码免冠照存在个人电脑或软盘里,随用随扩,岂不是要省掉许多麻烦

教你(新手)一步一步开始SEO

如果你从事SEO工作已经有段时间了,你可能对如何来优化一个网页有种直觉.你可能是同时来做好几件事,而不是执行一步一步的过程.但是如果你是正在学习SEO,或者是试图去理解SEO们是怎么来做你的网页的,那就显得有些难度了,尤其当你第一次接触这个的时候.  这篇文章旨在帮助SEO初学者们更多的了解SEO的过程,同时也帮助SEO老将们更好地与他们的客户沟通交流.我在论坛上发现很多的新手要求一步一步的SEO过程的指导.所以我就来举个以前做过的一个客户例子,一步步的解释SEO的过程 一.开始服务的第一件事是

一步一步用JBuilder4开发EJB(转自china-pub)

一步一步用JBuilder4开发EJB 作者:廖家序 发布时间:2001/02/07 文章摘要: 本文提供一个步骤,通过简单的例子介绍怎样在JBuilder4的集成开发环境下开发EJB.这些步骤都很简单,对于了解EJB体系结构和一般的编程规则的人很容易理解.目的是为了能够让大家掌握在JBuilder4下开发分布式的多层应用系统的简单.快速的方法,达到举一反三的效果.          正文: 一步一步用JBuilder4开发EJB 一. 简介 Enterprise Java Beans(EJB)

一步一步用Visual C#创建Web服务

visual|web|web服务|创建 引言: 微软在其.Net战略中,对其主推的Web服务做了大肆的宣扬.现在,Web服务正如火如荼地发展着,相关的各项新技术层出不穷.Web服务的发展正构筑着互联网时代美好的明天.在本文中,我将向大家介绍Web服务的一些基本知识以及如何用Visual C#一步一步地创建一个简单的Web服务. 一.Web服务概述: Web服务是一种新的Web应用程序分支,它们是自包含.自描述.模块化的应用,可以发布.定位.通过Web调用.Web服务可以执行从简单的请求到复杂商务

一步一步SharePoint 2007之十二:实现Form认证(2)

创建添加管理帐户的工程 摘要 本篇文章将记录实现Form认证的第二部分--创建添加管理帐户的工程.为了完成本部分的操作,希 望您已经安装了Microsoft Visual Studio 2005:) 之所以要创建添加管理帐户的工程,是因为采用Form认证后,域用户就不能再使用了,因此必须预先 创建一个网站的管理员帐户. 正文 下面将记录每一步的实现过程. 1.首先打开Visual Studio 2005,开始创建一个项目. 2.这里笔者选择创建一个ASP.NET Web Application项

一步一步SharePoint 2007之六:改变一个网站的导航栏

摘要 上一篇文章中,我们讲到向网站中添加了一个子网站,但是子网站的在导航栏中位置却不是我们希望 的位置,这让我们的女神计划受到了一定的阻碍,那么,我们有没有办法改变她在导航栏中的位置呢? 本篇文章将介绍如何改变一个网站的导航栏. 正文 一步一步操作过的朋友一定会发现,在Site Actions菜单中有两个有些类似的菜单项,一个是Modify Navigation,另外一个是Manager Content and Structure,这两个项目似乎都跟本篇文章要解决的问题 有关. 不过,在需要改变

一步一步SharePoint 2007之二十六:编写一个带事件的WebPart

摘要 前面的文章中,我们编写了一个非常简单的WebPart,它只能输出一个Hello World!的字符串. 很显然,这种WebPart根本就没有什么实际的作用.有没有办法编写比较复杂一些的,比如是带事件的 WebPart呢? 本篇文章将介绍如何编写一个带事件的WebPart. 正文 要实现带事件的WebPart,实际上就是要实现有复合控件的WebPart,这在开发过程中具有非常的的实 际意义.如果我们能够做到这点,那么,其它的什么样的WebPart,相信大家都能举一反三的做到. 这里,我就用一

一步一步优化Windows XP

对于一般的用户来讲,我们可能永远也用不到某些功能,或者说有些文件对于我们一般用户来讲存在硬盘里实在是多余,那么从现在开始,我们将一步一步地为我们的Windows XP做一些基本的优化. 在安装完XP后,我们会发现,我们的硬盘已经被占用了3个多G,我们要作的第一件事情就是对系统进行减肥.删除一系列对一般用户意义不大的文件. 首先我们从安装遗留下的问题下手,安装过程中系统为了能使Windows XP备份一些文件以便于Windows XP能够对文件更新,一般是为了系统能正常运行所作的准备,安装完Win

一步一步学EJB3.0(三):悟透会话Bean(下)

三.无状态会话Bean实例 在上一篇文章里,其实我们已经应用到了无状态会话Bean,那好,下面我们详细的来分析下上一篇文 章里给出的示例程序. 没有阅读过的朋友请点击这里阅读:<<一步一步学EJB 3.0(二):初探企业 EJB模块开发>> . 首先我们来看看接口的定义: 1 /** 2 * 远程接口 3 * @author Beniao 4 */ 5 @Remote 6 public interface HelloRemote { 7 void sayHello(String s