Apache Ant 实现自动化部署

Apache Ant 实现自动化部署

这篇文章帮你解决下列问题:

源码获取,源码编译,处理配置文件,应用部署,远程备份,部署回撤,启动,服务器状态,停止


目录

  • 1. 背景
  • 2. 我们需要什么样的流程
  • 3. 怎样实现自动部署
    • 3.1. 操作系统
    • 3.2. 程序部署
    • 3.3. 自动部署程序
  • 4. Apache Ant 实现自动化部署
    • 4.1. 运行环境
    • 4.2. 部署机
  • 5. 延伸阅读

1. 背景

在你的企业中是怎样完成从开发,测试到运维的?

很多企业的升级是这样做的,写完代码后编译打包,放到FTP上,同时发送一个升级邮件。然后让运维按照升级文档,一步一步操作。

这样的流程有很多问题

  1. 开发者通常是在Windows系统上完成开发与编译,而服务器通常是Linux操作系统,操作系统的差异可能导致编译后的程序运行不了。
  2. 安全角度,源码可以审查,但编译文件无法审查,打包过程可能被植入恶意代码
  3. 经常出现生产环境与本地开发环境不一致,运行有差异
  4. 浪费人力,理论上代码写完,就跟开发人员一点关系都没有了,但实际上每次升级过程开发与测试都需要在场

稍先进一点做法是使用Subversion/Git,开发将代码放到版本库中,运维直接使用 svn up / git pull 升级,这样做法也有很多问题存在

  1. 首次升级非常慢,svn 还好些,svn只取最后一次提交的版本;git 将所有的版本克隆到本地。
  2. 如果修改了本地文件,更新会产生冲突
  3. 配置文件无法个性化配置

2. 我们需要什么样的流程

我们需要什么样的流程或者什么样的流程才是最理想流程?

我认为:

  1. 开发人员不要做与开发无关的事情,代码写完就与开发没有半点关系了。通知测试人员,代码已经完成。
  2. 测试人员自己部署测试环境,不依赖开发人员,测试完成,通知运维人员可能升级了
  3. 运维人员不接受任何部门提供的打包或补丁程序,代码只能在配置管理服务器上完成编译打包以及部署。
  4. 升级应该由自动化工具完成,而不是人工操作。

开发,测试,运维各司其职,这就是DevOps。

3. 怎样实现自动部署

实现自动化部署有很多方法,很多年前笔者就开始研究总结,下面是一些经验分享。

3.1. 操作系统

开发,测试,生产三个环境的配置如果出自同一个模板会减少很多由于环境差异带来的困扰。

过程 1. 操作系统部署

  1. 无人值守安装 通过无人值守脚本安装操作系统,减少人为安装造成的差异
  2. 运行环境 统一配置运行环境,开发库以及版本统一
  3. 应用服务器统一 应用服务器版本,安装标准,配置文件都需要统一,减少差异

3.2. 程序部署

实现应用程序自动部署,首先你要清楚自动部署所需要的流程,部署一个流程通常是这样的:

过程 2. 自动部署步骤

  1. 初始化 建立工作环境,例如目录,检查所需环境
  2. 获取 从版本库指定分支中获取代码并保存到本地
  3. 编译 编译可执行代码
  4. 配置 处理配置文件
  5. 备份 备份应用程序
  6. 停止 服务服务
  7. 部署 部署应用程序到目的主机,如果已存在需要覆盖原来的程序
  8. 启动 启动服务

3.3. 自动部署程序

自动部署程序完成上面的部署,还需要做下面一些事情。

日志功能

  1. 记录什么时间点做过部署
  2. 部署了那些文件

4. Apache Ant 实现自动化部署

4.1. 运行环境

准备一个全新的的服务器,最小化安装CentOS 7操作系统,然后运行下面脚本初始化

			curl -s https://raw.githubusercontent.com/oscm/shell/master/os/centos7.sh | bash
curl -s https://raw.githubusercontent.com/oscm/shell/master/os/selinux.sh | bash
curl -s https://raw.githubusercontent.com/oscm/shell/master/os/iptables/iptables.sh | bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/os/ntpd/ntp.sh |	bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/os/ssh/sshd_config.sh	| bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/os/user/www.sh |	bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/lang/gcc/gcc.sh	| bash			

安装 server-jre 与 apache-tomcat

			curl -s	https://raw.githubusercontent.com/oscm/shell/master/lang/java/server-jre-8u40.sh	| bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/web/tomcat/apache-tomcat-8.0.26.sh	| bash
curl -s	https://raw.githubusercontent.com/oscm/shell/master/web/tomcat/systemctl.sh	| bash			

请使用systemctl 启动与停止 Tomcat

			systemctl start tomcat
systemctl stop tomcat			

Infrastructure Management Shell https://github.com/oscm/shell

4.2. 部署机

安装Ant

			curl -s	https://raw.githubusercontent.com/oscm/shell/master/lang/java/ant.sh | bash			

下载build.xml文件 https://github.com/oscm/build/tree/master/Ant

			wget https://raw.githubusercontent.com/oscm/build/master/Ant/build.xml			

打开 build.xml 文件

修改下面几处定义

			<property name="repository" value="版本库地址" />
<property name="branch" value="部署分支" />
<property name="remote" value="远程服务器" />
<property name="destination" value="远程目录" />		

开始部署代码

			ant backup
ant stop
ant deploy
ant start			

5. 延伸阅读

如果你想学习制作部署工具,还可以看看笔者早期的作品https://github.com/oscm/deployment这个工具使用Bash开发,写这个工具仅仅半天时间,后面小改过几次,这个工具伴随笔者很多年。

第一个版本因为很多缺陷存在,笔者使用Python重新开发 https://github.com/oscm/devops 这个工具更适合PHP项目部署

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2015-12-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云知识学习

IIS Windows 集成身份验证弹出输入用户名密码的解决办法

如果您正在设置您的IIS身份验证方式为“ Windows 集成身份验证 ”,并且您在使用IE访问您的站点时发现IE仍然要求您输入您的用户名和密码,而且您又不知道...

33813
来自专栏云计算D1net

Docker怎样改造你的开发团队

Docker提升了软件测试的速度,毫无疑问,任何研发团队都应该选择它。下面我来告诉你为什么。 一直以来,部署测试环境是一个耗时并且繁杂的工作。即便测试环境中运行...

3155
来自专栏技术翻译

Linux容器的发展及其未来趋势

Linux容器是操作系统级虚拟化在单个Linux主机上提供多个独立Linux环境的技术。与虚拟机(VM)不同,容器不运行专用客户操作系统。相反,他们共享主机操作...

430
来自专栏主机笔记

windows主机安装酷Q机器人自动管理QQ群组

经常在许多的群里都有一个在线的QQ群管机器人,可以起到提示、管理、监控等作用,让群主的省去很多麻烦的事情,其实这个要实现并不是什么难事,已经有人把应用都做好了,...

3309
来自专栏西安-晁州

Docker学习之基本概念

Docker学习之基本概念 作为一个后端noder,不了解docker有点说不过去,这节开始,学习一些docker层面的东西。 什么是docker Docker...

31512
来自专栏云加新鲜事儿

【干货合集】Docker快速入门与进阶

Docker 在众多技术中,绝对是当红炸子鸡。这年头,如果你不懂一点容器,不学一些Docker,还怎么出去跟人炫耀技术?Docker 也是云计算技术中较为热门的...

9.7K6
来自专栏云计算D1net

8个你可能不知道的Docker知识

自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,发生的最大的变革莫过于容器和容器管理工具,例如:Docker。在过去的一年内,Dock...

3555
来自专栏大魏分享(微信公众号:david-share)

你见过基于纯开源的超融合(HCI)么?

前言: 本文是基于笔者个人的实践,不代表任何官方的观点。 超融合的概念,近两年确认非常火。实际上,超融合架构起初是受到 Google、Faceb...

3053
来自专栏我是攻城师

8 个你可能不知道的 Docker 知识

2573
来自专栏finleyMa

docker学习系列9 Docker的技术原理介绍

Docker就是虚拟化的一种轻量级替代技术。Docker的容器技术不依赖任何语言、框架或系统,可以将App变成一种 标准化的、可移植的、自管理的组件,并脱离服...

862

扫描关注云+社区