发行和部署
远程部署和本地部署在实现方面并非完全不同,它仅需要一个不同的通道,从而将资源安全地从一个位置复制到另一个位置(从构建机器复制到目标环境)。在大多数企业中,安全性至关重要,因此仅仅使用 FTP 和 telnet 并不能满足需求。在这种情况下,SCP 和 SSH 可以轻松完成任务。通过 Ant 可以很方便地使用这些通道;事实上,我经常使用 JSch 中的 sshexec 和 scp 任务远程复制文件并在远程机器上运行命令。
 |
迁移到生产环境 尽管某些软件应用程序(例如,Software as a service,即 SaaS)可以改变部署频率,但是仍然难于迁移到生产环境中。您需要添加应用程序和数据库回滚,确保软件系统能够回滚到以前的状态。这一点至关重要,因为有可能带来数百万美元的损失或盈利。和测试软件系统本身一样,必须对自动化部署流程进行严格测试。 | |
使用 SCP 安全复制文件
SCP 能够在两台机器之间安全复制资源。很多工具都支持 SCP。在 Ant 中,理论上讲,在 Ant 中,JSch 将使用 SCP 复制资源(如 JAR 文件),而不需要人为干预,我喜欢将其称之为自动化。
在清单 6 中,scp 任务(JSch 提供)将构建机器中的 WAR 文件复制到远程机器上。JSch 库(jsch-0.1.36.jar)必须位于 Ant 的类路径中,以利用 scp 任务。 清单 6. 将一个 WAR 文件从一个机器中安全复制到另一个机器
<target name="copy-tomcat-dist">
<scp file="${basedir}/target/brewery.war"
trust="true"
keyfile="${ssh.key.file}"
username="${ssh.username}"
passphrase=""
todir="${ssh.server.username}:${ssh.server.password}@${ssh.server.hostname}
:${tomcat.home}/webapps" />
</target>
|
当调用 scp 任务时,需要提供进行复制的本地文件的位置,以及本地 SSH 私钥文件的位置(清单 6 中的 ssh.key.file ,用于安全身份验证)。最后,需要在远程机器上提供一个位置(清单 6 中的 ssh.server.hostname ),scp 将把(一个或多个)本地文件放在这个位置。
使用 SSH 远程调用流程
与使用 SCP 一样,在远程机器上运行命令通常需要某种安全机制,例如 SSH。在清单 7 中,我使用 JSch sshexec Ant 任务停止和重新启动位于某个远程机器上的 Tomcat 容器。构建流程刚刚将一系列资源(如 WAR 文件)复制到这台机器上。 清单 7. 停止和重新启动远程 Tomcat 实例
<target name="remote-tomcat-stop>
<sshexec host="${ssh.hostname}"
port="${ssh.port}"
keyfile="${ssh.key.file}"
username="${ssh.username}"
passphrase=""
trust="true"
command="${tomcat.home}/bin/shutdown" />
<sleep seconds="${sleep.time}" />
</target>
...
<target name="remote-tomcat-start">
<sshexec host="${ssh.hostname}"
port="${ssh.port}"
username="${ssh.username}"
passphrase=""
trust="true"
keyfile="${ssh.key.file}"
command="${tomcat.home}/bin/startup" />
<sleep seconds="${sleep.time}" />
</target>
|
在清单 7 中,我提供了托管 Tomcat 的机器的名称,Tomcat 的端口号(通常为 8080)、私钥文件(ssh.key.file ),这样,构建脚本可以安全地访问这个机器并执行特定命令。在本例中,可以看到,我依次调用了 shutdown 和 startup 命令。
理论上讲,完成这一步骤后,我已经完成了下面这些任务:配置远程数据库、将一个 Web 应用程序移至远程计算机、运行一个 Tomcat 实例。至此,人们可以正常测试甚至使用新版本的应用程序。
(编辑:aniston)
|