在云端使用 Force.com 和 Jenkins 进行持续集成
Salesforce 平台是主导性的云应用平台,使开发人员能够专注于创新。平台上拥有超过一百万个应用程序,许多团队在不同的地点和时区工作。了解如何使用 Salesforce 平台和 Jenkins 在云端实现持续集成。
Force.com 开发人员在职业生涯中几乎不可避免地会遇到这样的对话:*如何在跨多个实例的团队中维护开发周期*。这可能相当艰巨,尤其是取决于您的团队和项目的复杂性。面对复杂性时几乎普遍出现的一个问题是:*我们可以使用什么工具来自动化这件事?*
持续集成
持续集成(CI)工具背后的概念是,持续不断地进行开发变更和单元测试,以在开发周期本身中检测冲突和错误。它允许您在不严重依赖任何手动流程的情况下执行基础质量保证(至少直到您收到代码破坏了构建的通知)。流程大致是这样的:
因此,即使有多个开发人员在碎片化的实例上工作,您也会有一个测试实例,该实例会尝试根据源代码控制构建项目的当前状态。失败的会发送出去,以便作为周期的一部分进行修复。
市面上有很多工具,但很久以前,我的同事 James Hatton(在 Salesforce 工作)向我介绍了 Jenkins。作为 CI 工具,Jenkins 有一些突出的优点:免费、维护良好、拥有出色的插件库,并且提供易于安装的跨平台解决方案。可以将其视为部署工具中的 jQuery。在观看了 James 的 Dreamforce 会议关于持续集成的演示后,我写了一篇关于 Jenkins 的快速入门文章。但是,我们并没有真正详细介绍如何让 Jenkins 运行起来。
那么,让我们来解决这个问题。
步骤 1:下载 Force.com Migration Tool
哈——你肯定以为第一步是*下载 Jenkins*。嗯,差不多——但是,不先熟悉 Force.com Migration Tool,就无法顺利启动 Jenkins。虽然开发人员通常熟悉基于 Eclipse 的工具,但 Force.com Migration Tool 有时会变得不那么常见。然而,它是一个极其通用的工具,允许轻松地进行命令行部署。Force.com Migration Tool 是一个基于 Apache Ant 的解决方案,这使其能够轻松地与其他工具(如 Jenkins)兼容。
所以,请跳转到 Force.com Migration Tool 的 wiki 页面,熟悉它,安装它——然后我们将在步骤 2 见。
步骤 2:认识 Jenkins
前往 Jenkins 欢迎页面——该页面提供了快速介绍,并提供了一些不同的安装路径。Jenkins 甚至在该页面上提供免费试用下载,这很酷。选择适合您的安装路径。顺便说一句,我已将其下载到本地的 OSX 上,并使用以下 bash 脚本启动它:
#!/bin/bash nohup java -jar ~/Projects/jenkins.war --httpPort=8880 > ~/jenkins.log 2>&1 &
运行后,您应该会看到类似这样的屏幕:
除了开箱即用,没有任何作业列出。让我们设置一个。
步骤 3:配置 Jenkins
现在我们需要在 Jenkins 中创建一个新作业。点击“New Job”,然后选择第一个单选按钮“free-style project”。
“OK”按钮应该会出现,点击它来创建作业。它现在将出现在 Jenkins 的仪表板上。点击仪表板上的新作业,然后转到左侧导航栏中的“Configure”。
请注意配置页面顶部的“Source Code Management”部分。在这里,您将设置与您的源代码控制的链接。由于每个人的源代码控制都不同,您需要在此处输入您的具体信息。例如,我安装了 Git 和 Github 插件,并直接使用了我的通用开发者仓库。然后,您可以选择您的构建触发器。可能是最简单的默认选择是在周期内通过“Build Periodically”复选框进行构建。您可以从那里设置一个 cron 样式的计划。还有更高级的功能,比如在 Github 仓库更新时进行构建——但这需要 Github 可以找到的外部 URL。
要将 Jenkins 与 Force.com Migration Tool 连接起来,您需要转到“Build Panel”并选择一些 **Invoke Ant** 任务。我的其中一个看起来像这样:
这指向一个 Ant 友好的构建文件,该文件看起来会像:
<project default="test" basedir="." xmlns:sf="antlib:com.salesforce"> <property file="build-ji.properties"/> <property environment="env"/> <target name="test"> <sf:deploy username="${username}" password="${password}" serverurl="${serverurl}" deployRoot="./" runAllTests="true" /> </target> <target name="clean"> <sf:deploy username="${username}" password="${password}" serverurl="${serverurl}" deployRoot="clean" /> </target> </project>
以及一个属性文件,它看起来像这样:
username=username@something.com password=password serverurl=https://login.salesforce.com
显然,里面有您的凭据。您也可以硬编码一些值,我上面的方式并不是唯一的做法。
配置好之后,点击 **Save**。现在,您可以通过左侧导航栏中的“Build Now”链接启动一个新的构建。Jenkins 将运行配置中的所有内容并监控输出。您将看到进度条启动,然后一旦所有工作完成——您可以通过特定构建记录中的“Console Output”来查看结果。如果我想要成功或失败的自动通知,我可以轻松地将其作为配置中的一个“Post Build”步骤添加。
只是开始
这真的只是利用 Jenkins 和 Ant 的皮毛。例如,看看 Kevin O’Hara 的 基于 Grunt.js 的构建脚本,它管理了他们将文件翻译成用于部署的静态资源之前所需的所有优化。还可以看看 Eric Wilcox 出色的 Dreamforce 关于团队开发的会议,以及他创建的 配套工具。
在未来的博客文章中,我将分享我用于维护本地项目的一些 Bash 脚本。一如既往,如果您有任何评论或问题——请在下面的框中留下,或者在 Twitter 上关注我 @joshbirk。