一步一步用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 [email protected]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-11 03:21:09

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

Solo博客系统--Jenkins/docker自动化构建发布系统

部署 git服务器 yum install git useradd git passwd git 创建仓库 su - git mkdir solo.git git --bare init ##初始化仓库 docker cat >> /etc/docker/daemon.json << EOF { "insecure-registries":["reg.hequan.xyz:5000"] } EOF Jenkins服务器 wget https:

virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web

在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 OneAPM Python 探针来监测应用性能,形成一个「闭环」 !希望能对大家有所帮助,首先简单来介绍一下环境: 系统环境:ubuntu 14.04 Python 2.7.6 安装组件库 第一步安装所需要的存储库,因为打算用到虚拟环境,用到 pip 安装和管理 Python 组件,所以先更新本地包,然后安装组件: sudo

运维技巧:简单4步完成自动化构建发布

各位看官,这不是一个揭发单身有为青年因同事们天天秀恩爱而受到一万点暴击伤害的故事.这里指的狗粮,不是真正的"狗粮"--当然,也不是你们认为的狗粮. 事实上,现在很多涉足产品开发的互联网公司,都会提到"吃狗粮"这一概念(出自"Eating yourown dog food -- 吃你自家的狗粮"),它的意思是公司内部员工使用自己生产的产品进行日常工作.这么做有什么好处呢,比方说一家公司做美颜APP的,结果他们自己员工却用某图秀秀P图,这产品对外怎么

一步一步学习Vue(十一)

本篇继续学习vuex,还是以实例为主:我们以一步一步学Vue(四)中讲述的例子为基础,对其改造,基于vuex重构一遍,这是原始的代码: todolist.js ; (function () { var list = []; var Todo = (function () { var id = 1; return function (title, desc) { this.title = title; this.desc = desc; this.id = id++; } })(); /** *

.NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序

今天坐高铁时尝试了一种学习ASP.NET 5的笨方法,从空文件夹开始,根据运行dnx . kestrel命令的错误信息,一步一步写代码,直至将一个最简单的ASP.NET程序运行起来. 尝试的具体步骤如下. 新建一个空文件夹HelloCnblogs: mkdir HelloCnblogs && cd $_ 在这个空HelloCnblogs文件夹中运行 dnx . kestrel 命令(基于CoreCLR的dnx),运行结果是如下的出错信息: System.InvalidOperationEx

一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

这两天加班,不能兼顾博客的更新,请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容,而我们又想像数据库那样能直接体现在查询中,这里就是我们所说的增量索引.对于这样的需求我们怎么来实现呢?lucene内部是没有提供这种增量索引的实现的: 这里我们一般可能会想到,将之前的索引全部删除,然后进行索引的重建.对于这种做法,如果数据源的条数不是特别大的情况下倒还可以,如果数据源的条数特别大的话,势必会造成查询数据耗时,同时索引的构建也是比较耗时的,几相叠加,势必可能造成查询的时候数据缺失的情况

一步一步跟我学习lucene(9)---lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了:我们在用百度谷歌等搜索引擎的时候经常会看到按键放下的时候直接会提示用户是否想搜索某些相关的内容,恰好lucene在开发的时候想到了这一点,lucene提供的suggest包正是用来解决上述问题的. suggest包联想词相关介绍 suggest包提供了lucene的自动补全或者拼写检查的支持: 拼写检查相关的类在org.apache.

loadrunner安装运行一步一步来(多图)

安装loadrunner 一路遇到很多坑,很多坑,坑,为什么呢? 因为这软件是收费的,他操作文档写的很详细,就是不写基础环境的配置,下面安装过程写详细一些,减少大家没必要时间上的浪费和对此的谩骂 现在loadrunner 12的版本已经出来了,不过还没有破解,所以先安装测试11的版本,不绕圈子,先下载, 链接: http://pan.baidu.com/s/1kT8CbVh 密码: v4br 加密码是怕被删 遇到的坑 下面是通用的安装说明: 1.下载loadrunner-11.zip文件,解压缩

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27