一步一步用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时,会自动下载。
jenkins-config-maven

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

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
    jenkins-new-job-maven

  • 在配置页面里,勾选“参数化构建过程”,再依次增加“String”类型的参数

jenkins-new-job-parameters

共有这些参数:

    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

jenkins-new-job-git

  • 在“Post Steps”里,增加调用ansible playbook的shell命令
    jenkins-new-job-shell-ansible
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的界面了。

spring-mvc-showcase-webui

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

supervisor-webui

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


/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控制界面,所有运行的程序一目了然,很好用
目录
相关文章
|
12天前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
|
16天前
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
74 2
|
18天前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
|
1月前
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
57 0
|
12天前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
|
12天前
|
缓存 监控 前端开发
构建高性能Web应用的最佳实践
【8月更文挑战第8天】构建高性能的Web应用需要综合考虑多个方面,包括选择合适的技术栈、优化后端和前端性能、以及进行性能测试和监控。通过遵循这些最佳实践,开发者可以构建出高效、可扩展且用户友好的Web应用,提升用户体验和业务价值。
|
19天前
|
SQL 关系型数据库 PHP
深入PHP:构建高效Web应用的实用指南
【8月更文挑战第1天】本文将引导您深入了解PHP,并探讨如何利用这一流行的服务器端脚本语言来构建高效的Web应用程序。我们将通过实际代码示例来展示PHP的强大功能和灵活性,包括数据处理、数据库交互以及安全性考虑。准备好一起探索PHP的世界,并学习如何优化您的开发流程吧!
14 2
|
25天前
|
SQL 安全 数据库
构建安全的Python Web应用是一项持续的努力,需要开发者时刻保持警惕,并采用最佳实践来预防各种安全威胁
【7月更文挑战第26天】构建安全的Python Web应用是一项持续的努力,需要开发者时刻保持警惕,并采用最佳实践来预防各种安全威胁
46 9
|
22天前
|
存储 监控 安全
如何构建安全的Web应用程序:全方位指南
【7月更文挑战第28天】构建安全的Web应用程序是一个持续的过程,需要贯穿于整个应用程序的生命周期中。通过规划阶段的安全设计、开发阶段的安全措施实施、测试阶段的漏洞发现与修复以及部署与运维阶段的持续监控与维护,可以显著提高Web应用程序的安全性。希望本文的全方位指南能够为您在构建安全的Web应用程序方面提供有益的参考。
|
1月前
|
存储 数据库 开发者
Flask中的蓝图与插件应用:构建模块化Web应用的利器
【7月更文挑战第19天】Flask蓝图和插件是构建模块化、可扩展和可维护Web应用的强大工具。蓝图允许你将应用分割成多个独立的部分,提高了代码的组织性和可重用性;而插件则为Flask应用提供了丰富的功能和社区支持,简化了开发过程。通过合理地使用蓝图和插件,你可以更加高效地开发出高质量的Web应用。