概述
学习如何创建一个 DevOps Services 项目来将代码存储到该项目的 Git 存储库中,以及如何创建一个 Delivery Pipeline
,以便只要您团队的任何人向您的 Git 存储库推送了更改,就会自动部署您应用程序的最新版本。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。
您将在本教程中完成的任务
第 1 步. 下载代码
第 2 步. 创建一个 DevOps Services
项目
第 3 步. 将代码推送到一个 Git 存储库
第 4 步. 配置 Delivery
Pipeline
第 5 步. 将更改推送到 Git 存储库来触发 Delivery
Pipeline
第 6 步. 观察 Delivery
Pipeline
测验
结束语
您在前一篇教程 “将一个示例 Node.js 应用程序部署到云中” 中已经了解到,可以使用 Node.js 和 Cloud Foundry
命令行来运行、修改、测试 Web 应用程序,并将其部署到云中。现在您已经知道了如何将应用程序部署到
Bluemix,以便任何人都可以通过网络访问它,您可能还想知道哪些 DevOps 支持可以让您的开发和操作流程变得轻松而又高效。
“IBM Bluemix DevOps Services 是云上的一个软件即服务 (SaaS),它支持持续交付。借助
DevOps Services,您可以在同一个地方开发、跟踪、计划和部署软件。”
要学习本教程,首先需要下载和解压代码。该代码与 上一篇教程 中的代码非常相似,仅在 package.json 描述符中做了细微更改。
- 单击此按钮下载示例 Node.js Web 应用程序 nodetutorial2.zip 的代码:
下载示例 Node.js Web 应用程序
- 将应用程序解压到您选择的一个工作目录中。
第
2 步. 创建一个 DevOps Services 项目
在一个 DevOps Services
项目中,一个或多个人可以为了实现某个目标而构建、分享、组织和管理资源的版本。通常,该目标是创建一个应用程序。在这一步中,您将创建一个 DevOps
Services 项目,该项目中包含您的 Git 存储库和 Delivery Pipeline。
- 导航到 DevOps Services。
- 如果还未执行身份验证,请使用您的 IBM ID(用于 Bluemix 的相同 ID)进行登录。
- 在 MY PROJECTS 页面上,单击 CREATE PROJECT。
- 在 Create a project 页面上:
- 为您的项目键入一个名称。
- 单击 Create a new repository。
- 单击 Create a Git repo on Bluemix。
- 确保 "Add features for Scrum development" 复选框已选中。
- 确保 "Make this a Bluemix Project" 复选框已选中。
- 选择您想您的应用程序部署到的 Bluemix 地区、组织和空间。
- 单击 CREATE。
现在,已经为您创建了一个 DevOps Services 项目。您可以浏览您的项目,邀请其他人加入您的项目,并更新您项目的图像和描述。
将代码存储在源代码控制中心有许多好处,其中包括提供您代码的备份,允许您回滚到以前的版本,使您能够查看代码的历史记录,从而理解为什么执行更改,还使您能够轻松地与队友一起处理同一个代码库。
在本教程中,会将代码存储于托管在 Bluemix 上的一个 Git 存储库中。您将使用 git 命令行客户端来管理与 Git
存储库的连接。如果喜欢的话,还可以使用另一个适合您的操作系统的工具,比如一个 GUI 工具。
获取
DevOps Services 上的存储库的 Git URL
- 在 DevOps Services 上的项目页面中,单击右上角的齿轮图标来打开项目设置。
- 复制 Git URL。
- 将目录更改为代码的根目录。
- 如果尚未设置将与您的代码提交关联的用户名和电子邮件,请设置它们;例如:
git config --global user.name "Sam Cooke"
git config --global user.email "scooke@bluemix.net"
- 初始化本地 Git 存储库:
git init
您会看到一条与此消息类似的确认消息:
Initialized empty Git repository in <您的代码目录的路径>
点击查看大图
接下来,要选择应该在源代码控制中心中跟踪哪些文件,哪些文件应该忽略。
- 在编辑器中创建一个 .gitignore
文件。
您指定的任何文件或目录都会被版本控制工具忽略。此特性使您能够避免将生成的大型工件保存到存储库中。
- 将 node_modules 目录(它不应包含在存储库中)添加到 .gitingore 文件中。
您始终可以通过 npm install
重新生成 node_modules 目录的内容;不需要在存储库中填满大量依赖关系库源文件。
指定应该在源代码控制中心中跟踪哪些文件后,可以将您的更改提交到本地 Git 存储库。
- 将所有项目文件添加到本地 Git 存储库:
git add
。 - 使用 commit comment 将添加的文件提交到本地 Git
存储库:
git commit –m 'initial commit of code'
Git
将列出您提交的所有更改来验证此命令。
点击查看大图
您的本地存储库已准备就绪。下一步是设置 DevOps 远程存储库的引用。
- 为远程 DevOps Services Git 存储库添加别名
origin:
git remote add origin <the DevOps project Git URL>
- 确认您已经成功添加远程存储库:
git remote –v
您应看到远程存储库引用的列表和它的别名。
点击查看大图
将代码推送到
DevOps Services Git 存储库
接下来,将您提交的更改推送到 DevOps Services 上的远程 Git 存储库。
- 将您的代码推送到远程存储库,并在提示时输入您的登录凭证:
git push origin master
这一步将来自本地存储库的主分支上的所有已提交更改推送到
origin(您在 DevOps Services 上的 Git 存储库的别名),并将它们写入到
DevOps Services Git 存储库中。
- 确认您的本地存储库与 DevOps Cit
存储库同步:
git status
状态报告应该显示您的本地存储库是同步的,没有需要提交到
DevOps 存储库的新内容。
您的项目代码现在已存储在您的 DevOps Services 项目的 Git
存储库中。导航到 DevOps Services
并选中您的项目,以查看代码的只读视图。
第
4 步. 配置 Delivery Pipeline
成功的 DevOps 方法的一个要点是拥有自动化的构建和部署功能。幸运的是,DevOps Services 提供了 Delivery Pipeline
服务,您可以配置该服务,通过自动或手动触发方式构建、测试您的应用程序,并将其部署到 Bluemix。
在 Bluemix 中,组织和空间是 Cloud Foundry 基础架构中的组织单元,可用来存储和跟踪应用程序资源。组织
包含域、空间和用户;空间 包含应用程序和服务。
在默认情况下,在首次登录 Bluemix 后,会为您创建一个 dev(开发)空间。在本教程中,可以认为 dev
空间表示一个在具有生产质量的环境中实时测试代码的地方,无需将代码部署到实际生产环境中。(一些人可能将此称为质量保证或测试空间。)在这一步中,您将创建一个名为
prod 的新空间来表示生产空间:用来存放最终用户将要使用的应用程序的地方。
您还将配置 Delivery Pipeline 服务,只要您或您团队中的某人向您项目的 Git
存储库推送了代码,该服务就会构建您的应用程序,并将其部署到您在 Bluemix 中的 dev 和 prod 空间。
点击查看大图
- 在 DevOps Services 上的项目页面中,单击右上角的 BUILD &
DEPLOY。
- 单击 ADD STAGE。
- 单击 Stage Configuration 对话框顶部的 MyStage,通过键入
Build Stage 为您的阶段命名。
- 请注意,Input Type 在默认情况下被设置为 “SCM Repository”。此设置意味着该阶段的输入将是您的 Git
存储库。
- 请注意,默认情况下已经选中了 "Run jobs whenever a change is pushed to
Git"。该选择意味着只要您或您团队中的某人向您项目的存储库推送了代码,就会自动触发构建阶段。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Build。
- 在 Builder Type 下拉列表中,选择 npm,它告诉 DevOps Services 使用
npm install 作为构建 shell 命令来执行该作业。npm install 抓取应用程序的所有依赖项,并将它们放在
node_modules 目录中。
请注意,将 Working Directory 和 Archive Directory
字段留空,因为此次构建将使用根目录。同样地,暂时让 Enable Test Report
处于未选中状态;我们将在下一节中介绍测试作业。
- 另请注意,默认情况下已经选中了 "Stop stage execution on job failure"
复选框。该选择意味着如果发生故障,该管道中的所有后续作业都将停止运行,整个阶段将被标记为失败。
- 单击 SAVE。
在构建阶段创建一个测试作业,以便在 Bluemix 上运行您的单元测试
- 单击 Build Stage 磁贴右上角的齿轮图标,从下拉列表中选择 Configure
Stage。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Test。
- 在 Tester Type 下拉列表中选择 Simple,这将允许您使用 Mocha 运行单元测试,然后显示结果文件。
- 在 Test Command 框中,添加以下命令来安装所有 Node.js 依赖项,比如 Mocha 和 xunit-file
插件,然后运行单元测试:
npm install
npm test
将
Working 目录留空,以便使用根目录。
- 确保已选中 Enable Test Report。
- 对于 Test Result File Pattern,请输入 xunit.xml
- 请注意,默认情况下已经选中了 "Stop stage execution on job failure"
复选框。此选择意味着如果发生故障,该管道中的任何后续作业都不会运行,该作业将被标记为失败。
- 单击 SAVE。
创建一个部署阶段,用它将您的应用程序部署到您在 Bluemix 中的 dev 空间中。
- 单击 ADD STAGE。
- 单击 Stage Configuration 对话框顶部的 MyStage,通过键入
Dev Deployment 为您的阶段命名。
- 请注意,Input Type 已经设置为 "Build
Artifacts"。此设置意味着上一个阶段中创建的构建工件将是这个阶段的输入。
- 请注意,默认情况下已经选中了 "Run jobs when the previous stage is
completed"。此设置将配置您的管道,以便只要有人向您项目的存储库推送了代码,就会运行构建步骤,而且如果成功完成构建,则会启动向开发环境的部署。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Deploy。
- 将 Application Name 更改为您的 Bluemix dev 空间的唯一名称。
- 您希望您的应用程序部署到一致的 URL(以便您团队的开发人员可以使用该 URL 测试他们的代码),所以在 Deploy Script 部分的
cf push "${CF_APP}"
的后面,添加:
-n whateverYouWantYourUrlToBe
备注:该
URL 必须在所有 Bluemix 应用程序中是唯一的,所以请发挥您的创造力。
- 单击 SAVE。
创建一个生产阶段,用它将您的应用程序部署到您在 Bluemix 中的 prod 空间中。
- 单击 ADD STAGE。
- 单击 Stage Configuration 对话框顶部的 MyStage,通过键入
Prod Deployment 为您的阶段命名。
- 请注意,Input Type 已经设置为 "Build
Artifacts"。此设置意味着构建阶段中创建的构建工件将是这个阶段的输入。
- 请注意,默认情况下已经选中了 "Run jobs when the previous stage is
completed"。此设置将配置您的管道,以便在 Dev Deployment 阶段成功完成时运行此阶段。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Deploy。
- 在 Space 字段中,选择 Create a new space。
- 在 Enter space name 字段中,键入 prod 并单击
CREATE。
- 将 Application Name 更改为您的 Bluemix prod 空间的唯一名称。
- 您希望您的应用程序部署到一个一致的 URL(以便最终用户可以使用该 URL 访问您的应用程序),所以在 Deploy Script 部分的
cf push "${CF_APP}"
的后面,添加:
-n whateverYouWantYourUrlToBe
备注:请记住,该
URL 必须在所有 Bluemix 应用程序中是唯一的,所以请发挥您的创造力。
- 单击 SAVE。
您现在已有一个 Delivery Pipeline,它将构建您的应用程序(包括运行 Mocha 单元测试),将您的应用程序部署到 dev
空间,然后将您的应用程序部署到 prod 空间。
第 5
步. 将更改推送到 Git 存储库来触发 Delivery Pipeline
配置 Delivery Pipeline 后,是时候试验一下了!一种方法是单击构建阶段中的播放按钮来手动触发该管道。另一种选择是将一个更改推送到
Git 存储库来触发该管道,这是您将在这一步中采用的方法。
您需要做的第一件事是更改一个文件。
- 在文本编辑器中打开 <您的代码目录>/views/australia.jade 文件。
- 向下滚动编辑器,直到看到:
<div id="price">120.00</div>
- 将价格从 120.00 更改为 130.00(需求增加了!)。
- 保存文件。
更改文件后,可以将更改提交到您的本地 Git 存储库,并将它推送到托管在 DevOps Services 上的远程 Git 存储库。
- 将目录更改为代码的根目录,添加所有要提交的更改:
git add。
- 提交这些更改和一条注释:
git commit –m 'increased price of print'
- 将更改推送到 DevOps Git
存储库:
git push origin master
请记住,在写入您的 DevOps
存储库之前,系统会提示您进行登录。
第 6
步. 观察 Delivery Pipeline
上一步推送到 DevOps Services 上托管的 Git 存储库的更改自动触发了 Delivery
Pipeline。在这一步中,将分析该管道的结果。可以在管道运行期间查看一些日志和结果。下面的操作说明假设该管道已完成,但也可以在管道运行期间分析它。
- 在 DevOps Services 上的项目页面中,单击右上角的 BUILD & DEPLOY。
点击查看大图
- 在 Build Stage 磁贴中,可以观察到上一个构建作业已成功完成。如果在构建运行时切换到这个 "Pipeline :All
Stages" 屏幕,您会看到状态在实时变化。单击 View logs and
history。
在 LOGS 选项卡上,可以看到构建作业的输出。在本例中,可以看到添加到
node_modules 目录的依赖项。
点击查看大图
- 单击 Back to the Pipeline,可以在 Build Stage
磁贴中注意到测试作业已成功完成。单击 Test 作业。
可以在 LOGS
选项卡上看到此测试作业的输出。
- 单击 TESTS 选项卡,可以注意到两个测试都已通过。
- 单击 Mocha Tests 可以看到该文件中包含的测试列表。
点击查看大图
- 单击页面顶部的 Back to Pipeline。
- 在 Dev Deployment 磁贴中,可以观察到已成功完成部署。单击 View logs and
history。
在 LOGS 选项卡上,可以查看部署的输出。
- 单击页面顶部的 Back to Pipeline。
- 在 Dev Deployment 磁贴中,可以注意到,您可单击正在运行的应用程序的 URL
来查看它。还可以查看运行时日志,这在调试问题时很有帮助。
- 浏览生产部署的日志和正在运行的应用程序。
测试您在本教程中学到的知识。答案 在下方。
- IBM Bluemix DevOps Services 支持哪种版本控制存储库:
- Git
- Subversion
- Mercurial
- CVS
- Bazaar
- 您如何使用 DevOps Services 管道触发构建?
- 从 DevOps Services 仪表板手动触发
- 只要有人向 DevOps Git 存储库推送代码
- 基于一个可配置的计时器
- b 和 c
- a 和 b
- 要控制在将代码推送到 Git 存储库时排除的文件或目录,可以使用下面这个文件:
- manifest.yml
- config.ignore
- .gitignore
- git.ignoore
- my.cnf
- 以下哪条命令用于创建 DevOps Git 存储库的本地副本?
- git init
- git clone
- git status
- git push
- git config
- Build Stage、Dev Deployment 和 Production Deployment 阶段都是一个 DevOps
Service ________ 中的阶段
- 装配线
- 交付管道
- 生命线传递
- 作业
- 存储库
测验的答案
1. a,2. e,3. c,4. b,5. b
在本教程中,您学习了如何利用 DevOps Services 来:
- 在 DevOps Services 上创建一个托管 Git 存储库的项目
- 将代码推送到远程 Git 存储库
- 创建一个 Delivery
Pipeline,用它来构建您的应用程序,运行单元测试,并在您或您团队的某人向您项目的存储库推送代码的任何时候,将该应用程序部署到多个阶段。
现在通过下一篇教程在 developerWorks 上继续学习 “Bluemix
基础”。您会看到如何通过云服务增强您的应用程序和添加功能:
将大量服务添加到您的应用程序中
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix
资源中心。