CloudBees是一个云平台,为您的应用程序提供存储库,CI服务(Jenkins)和服务器。 因此,您需要开发,测试和部署所有内容。 有很多选项,例如存储库可以是Git或SVN,对于服务器,您可以选择Jetty,Tomcat,Glassfish,JBoss,Wildfly等。还可以运行带有端口号的独立应用程序,因此您可以启动自己的服务器。 在这种情况下,我们将在这里介绍。
spray.io是适用于Web应用程序的Scala框架。 它允许您创建独立的Web应用程序(启动它们自己的服务器,使用Spray-can)或稍微受限制的.war的Web应用程序(spray-servlet),您可以将其部署在Glassfish,JBoss等JEE服务器上。我们将使用独立的这里。
您可以从github克隆应用程序。 现在让我们快速浏览一下。
该应用程序
开机
Boot
文件是Scala App
,因此它类似于具有main方法的java类。 它是可运行的。 它创建Service
角色,该角色正在处理所有HTTP请求。 它还从app.port
系统属性读取端口号, app.port
服务绑定到主机和端口。 app.port
由CloudBees提供,如果要在本地运行该应用程序,则需要通过jvm命令行-Dapp.port=8080
。
服务
Service
具有MyService
特性,该特性仅处理到空路径的路由。 是的,该应用程序不是很复杂!
建档
build.gradle
文件更有趣。 让我们从头开始。
-
mainClassName
属性设置为Scala App。 当您通过gradlew run
从命令行在本地运行该类时,将要运行该类。 -
applicationDefaultJvmArgs
设置为-Dapp.port=8080
,这也是从gradle本地运行的必要条件。 这样,我们设置了要绑定Service
端口。 -
jar.archiveName
是用于设置生成的.jar名称的设置。 没有它,则取决于项目目录名称。
您可以通过发出gradlew run
(确保gradlew
文件是可执行文件)来运行应用程序。 当它运行时,您可以将浏览器指向http:// localhost:8080,然后应该看到“向喷雾罐上的喷雾路由问好!” 没什么,对不起。
也有“ cb”任务定义为gradle。 如果发出gradlew cb
,它将构建zip文件,其所有依赖项.jars和szjug-sprayapp-1.0.jar
位于其根目录中。 对于CloudBees独立应用程序,此布局是必需的。
部署到CloudBees
首先,您需要在CloudBees上创建一个帐户。 如果有的话,请下载CloudBees SDK –这样您就可以从命令行运行命令。 在Mac上,我更喜欢brew install
,但是您可以自由选择方式。
安装后,运行bees
命令。 首次运行时,它会询问您的登录名/密码,因此您不需要每次使用bees
时都提供它。
生成.zip,我们将其部署到云中。 进入应用程序目录( szjug-sprayapp
)并发出gradlew cb
命令。 该命令不仅创建.zip文件,还打印.jars列表,这些列表对于作为类路径传递给bees命令很有用。
使用从szjug-sprayapp
目录运行的以下命令部署应用程序:
bees app:deploy -a spray-can -t java -R class=pl.szjug.sprayapp.Boot -R classpath=spray-can-1.3.1.jar:spray-routing-1.3.1.jar:spray-testkit-1.3.1.jar:akka-actor_2.10-2.3.2.jar:spray-io-1.3.1.jar:spray-http-1.3.1.jar:spray-util-1.3.1.jar:scala-library-2.10.3.jar:spray-httpx-1.3.1.jar:shapeless_2.10-1.2.4.jar:akka-testkit_2.10-2.3.0.jar:config-1.2.0.jar:parboiled-scala_2.10-1.1.6.jar:mimepull-1.9.4.jar:parboiled-core-1.1.6.jar:szjug-sprayapp-1.0.jar build/distributions/szjug-sprayapp-1.0.zip
这里是可读性的缩写版本:
bees app:deploy -a spray-can -t java -R class=pl.szjug.sprayapp.Boot -R classpath=...:szjug-sprayapp-1.0.jar build/distributions/szjug-sprayapp-1.0.zip
spray-can
是应用程序名称, -t java
是应用程序类型。 -R
是CloudBees属性,例如要运行的类和要使用的类路径。 当gradle运行cb
任务时,会很好地打印classpath的文件,因此您只需要复制和粘贴即可。
就是这样! 我们的应用程序正在CloudBees服务器上运行。 可从CloudBees控制台的URL访问。
使用CloudBees服务
该应用程序已部署在CloudBees上,仅此而已? 正如我提到的,我们也可以使用git仓库和Jenkins。 让我们现在就开始做吧。
仓库(Git)
在您的CloudBees帐户上创建新的git存储库。 选择左侧的“存储库”,“添加存储库”……这非常简单。
将其命名为“ szjug-app-repo”,并记住它应该是Git。
接下来,将此存储库添加为本地git存储库的远程存储库。 在CloudBees控制台的存储库页面上,有一个非常有用的关于如何执行的便览表。
首先添加git远程存储库。 命名为cb
git remote add cb ssh://git@git.cloudbees.com/pawelstawicki/szjug-app-repo.git
然后将您的提交推送到此处:
git push cb master
现在,您在CloudBees上有了代码。
CI构建服务器(Jenkins)
现在该配置在CI服务器上构建的应用程序了。 转到“建筑物”。 这就是詹金斯的住所。 创建新的“自由式”工作。
将git存储库设置为工作,以便Jenkins检出始终为最新代码版本。 您将需要存储库URL。 您可以从“回购”页面上获取它。
在此处设置URL:
接下来要设置的是gradle任务。 添加类型为“调用gradle脚本”的下一个构建步骤。 选择“使用Gradle包装器” –这样,您可以使用项目随附的gradle版本。 将“ cb”设置为要运行的gradle任务。
好了,这就是构建应用程序所需的全部。 但是我们要部署它,不是吗? 添加构建后操作“部署应用程序”。 输入应用ID( spray-can
在我们的例子中,区域会自动改变)。 这样,我们就告诉Jenkins 在哪里部署。 它还需要知道要部署什么 。 输入build/distributions/szjug-app-job-*.zip
作为“应用程序文件”。
由于您是通过命令行较早地部署应用程序的,因此像应用程序类型,主类,类路径等设置已经存在,您无需再次提供它。
保留每个构建中的zip文件可能也很有用,因此我们可以将其存档。 只需添加构建后操作“存档工件”并设置相同的zip文件即可。
好的,这就是在Jenkins上进行构建配置的全部内容。 现在,您可以单击“立即构建”链接,并且应该将构建添加到队列中。 完成后,您可以查看日志,状态等。但是更重要的是,应将应用程序部署到全世界并可以访问。 现在,您可以更改其中的某些内容,点击“立即构建”,完成后检查是否应用了更改。
测验
可能您还注意到有附加的测试。 您可以通过gradlew test
运行它。 它的specs2测试,用特质MyService
,所以我们有机会获得myRoute
,并Specs2RouteTest
所以我们有机会获得spray.io检测设施。
@RunWith(classOf[JUnitRunner])
是在gradle中运行测试所必需的。
现在,当我们进行测试时,我们希望看到测试结果。 这是詹金斯的另一个构建后步骤。 按“添加构建后操作”->“发布JUnit测试结果报告”。
Gradle不会将测试结果放在maven所在的地方,因此您需要指定报告文件的位置。
完成后,下一个版本应显示测试结果。
触发构建作业
现在,您可以进行构建作业,以构建,测试和部署应用程序。 但是,此构建仅在您手动运行时才能运行。 让我们每天运行一次,并将每一次更改推送到存储库之后。
摘要
因此,现在您拥有开发应用程序所需的一切。 Git存储库,持续集成构建系统以及用于将应用程序部署到(实际上也是连续地)的基础架构。
想想您自己的应用程序,……开心地发展!
翻译自: https://www.javacodegeeks.com/2014/07/develop-test-and-deploy-standalone-apps-on-cloudbees.html