在CloudBees上开发,测试和部署独立应用程序

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存储库。 选择左侧的“存储库”,“添加存储库”……这非常简单。
2014-07-01_2342

将其命名为“ szjug-app-repo”,并记住它应该是Git。

2014-07-01_2343

接下来,将此存储库添加为本地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服务器上构建的应用程序了。 转到“建筑物”。 这就是詹金斯的住所。 创建新的“自由式”工作。

2014-07-01_2357

2014-07-01_2359

将git存储库设置为工作,以便Jenkins检出始终为最新代码版本。 您将需要存储库URL。 您可以从“回购”页面上获取它。

2014-07-02_0001

在此处设置URL:

2014-07-02_0010

接下来要设置的是gradle任务。 添加类型为“调用gradle脚本”的下一个构建步骤。 选择“使用Gradle包装器” –这样,您可以使用项目随附的gradle版本。 将“ cb”设置为要运行的gradle任务。

Gradlew

好了,这就是构建应用程序所需的全部。 但是我们要部署它,不是吗? 添加构建后操作“部署应用程序”。 输入应用ID( spray-can在我们的例子中,区域会自动改变)。 这样,我们就告诉Jenkins 在哪里部署。 它还需要知道要部署什么 。 输入build/distributions/szjug-app-job-*.zip作为“应用程序文件”。

2014-07-02_0113

由于您是通过命令行较早地部署应用程序的,因此像应用程序类型,主类,类路径等设置已经存在,您无需再次提供它。

保留每个构建中的zip文件可能也很有用,因此我们可以将其存档。 只需添加构建后操作“存档工件”并设置相同的zip文件即可。

2014-07-02_0039

好的,这就是在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五次实验

数组和指针 1. 设N个整数有序(由小到大)存放在一维数组中。编写函数binarySearch(),实现使用二分查找算法在一维数组中 查找特定整数item。如果找到,返回item在数组元素中的下标;如果item不在数组中,则返回-1。 实现方…

《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」

此文是我的出版书籍《React Native 精解与实战》连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理、React Native 组件布局、组件与 API 的介绍与代码实战,以及 React Native 与 iOS、Android 平台的混合开发底层原理…

React.js 入门与实战课程思维导图

原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,在这里分享了课程中的思维导图,供大家参考。 原文发表于我的技术博客 此导图为课程中整理的重要知识点以及大纲导图,供大家学…

Webpack 2 视频教程 002 - NodeJS 安装与配置

原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」。 Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲解的。 这个基本就是目前国内最好的 Webpack 2.0 最好的学习视频了,…

vue+elementUI 添加多个可以全选的多选框

elementUI-checkbox官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/checkbox 一、要做上面这种效果&#xff0c;首先要了解全选框中indeterminate 状态和v-model的变量的关系 参考 -Dayer-&#xff1a; <el-checkbox :indeterminate"isIndeterminate&…

WMI in C#[强类型操作]

C# 进行WMI操作的内容封装在System.Management.dll中&#xff0c;具体的在MSDN有详细描述&#xff0c;默认是用[“**’]去读取和设置属性等。 此处介绍一个自动生成强类型的包装软件&#xff0c;这样处理起来就简单了很多&#xff0c;不用在反复的查看参数等信息了。 1、 使用W…

2019年ipa发布苹果应用商店审核指南

https://baijiahao.baidu.com/s?id1623886553597961077&wfrspider&forpc ipa 发布审核指南 说明&#xff1a; 本指南为初版&#xff0c;旨在帮助非技术人员快速了解苹果ipa发布审核流程非技术的审核专员发布审核只需处理 &#xff08;五&#xff09;、iTunes connect …

GridView生成序号

一个经常碰到的情况&#xff1a;GridView需要添加一个序号列&#xff0c;并且从1开始自动编号。而数据库中的ID往往是不连续的&#xff08;会有记录被删除的情况&#xff09;&#xff0c;我们无法绑定现有字段作为编号。因此我们需要手动给GridView编号。 思路&#xff1a;在Gr…

[前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化

在前端优化中&#xff0c;js、css等文件的优化一般都是压缩的优化&#xff0c;进行合并、减小体积以达到减小请求的目的。 今天发现了一个集成在VS中的压缩插件&#xff0c;使得压缩变得比较快捷。 配置方法 首先需要去下载Microsoft Ajax Minifier&#xff0c;一路安装就可以&…

手把手教你用 elementUI 实现导航栏

elementUI导航栏官网 1. 安装 elementUI 2. 文件准备 3. 配置路由 4. 导航栏代码 一、安装 elementUI npm i element-ui -S&#xff1b; 在 main.js 中注册组件&#xff1a; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(Elem…

vuex+element 从后台获取数据写导航栏-菜单权限

主要用到 vuex、router.beforeEach、router.addRoutes()。vuex 的使用方法可以看我的另一篇博客&#xff1a;vue笔记&#xff08;四&#xff09;vuex。 顺便安利一个 在线视频转gif图。 因为第一次用到 router.addRoutes()&#xff0c;在做这个需求的时候遇到了很多问题&…

P3393 逃离僵尸岛 最短路dijkstra

题目描述 小a住的国家被僵尸侵略了&#xff01;小a打算逃离到该国唯一的国际空港逃出这个国家。 该国有N个城市&#xff0c;城市之间有道路相连。一共有M条双向道路。保证没有自环和重边。 K个城市已经被僵尸控制了&#xff0c;如果贸然闯入就会被感染TAT...所以不能进入。由其…

JavaFX技巧7:使用CSS颜色常量/派生颜色

在使用FlexCalendarFX时&#xff0c;我不得不定义一组颜色以可视化不同颜色的不同日历的控件。 每个日历不仅提供一种颜色&#xff0c;还提供几种&#xff1a;用于取消选择/选定/悬停状态的背景和文本颜色。 颜色曾在多个地方使用过&#xff0c;但为了简洁起见&#xff0c;我仅…

import() 动态加载component组件失败

在写 vueelement 从后台获取数据写导航栏 时&#xff0c;当我加载动态路由&#xff0c;import() 总是失败。 假设 path: “/views/Home.vue”&#xff0c;name: “Home”。 一、使用 import() 语法加载组件 参考&#xff1a;“Cookysurongbin”的 解决vue动态路由异步加载im…

进入登录页时,用户名输入框自动聚焦、按enter键让密码框聚焦,完整输入信息后登录

让element-ui的输入框聚焦的4种方式 思路&#xff1a;&#xff08;可以跳过这一步看完整代码——完整代码&#xff09; 1. 进入页面时&#xff0c;用户名输入框就要获取焦点&#xff0c;使用 自定义指令 聚焦更方便。当然也可以用 ref 在 mounted() 钩子函数中让输入框聚焦。 …

vue-cli安装步骤

vue-cli脚手架模板是基于node下的npm来完成安装的所以首先需要安装node 条件&#xff1a; node在4.以上&#xff0c;npm在3以上 安装 指令&#xff1a; 1、 npm install -g vue-cli在全局下安装vue-cli # 安装 vue-cli npm install -g vue-cli# 初始化 webpack 项目 vue in…

使用Java编写简单的老虎机游戏

无论游戏多么简单或复杂 &#xff0c;Java都能胜任&#xff01; 在这篇文章中&#xff0c;让我们看一下Java编程的初学者如何制作一个简单而功能齐全的老虎机。 老虎机已经存在很长时间了&#xff0c;但是它的娱乐价值似乎并没有减弱。 InterCasino是第一个在1996年向世界提供…

html笔记(二)html4+css2.0(元素类型、css精灵、宽度自适应、BFC、浏览器相关概述、css统筹)

大标题小节一、元素类型1. 元素分类2. 置换和非置换元素3. 元素类型转换二、css精灵三、宽高自适应1. 宽度自适应2. 高度自适应3. 最小高度自适应4. 高度塌陷及解决办法5. 元素的高度自适应屏幕的高度四、BEC概念应用1. 常见定位方案2. 触发BFC3. BFC特性及应用4. BFC概念五、浏…

25.C# 异步调用Web服务

1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.EnterpriseServices;namespace WebServ…

css中单位的使用

css中许多的属性都需要添加长度&#xff0c;而长度一般由数字和单位构成&#xff0c;如1px,1.5em,2vh&#xff1b;也可以省略单位&#xff0c;如line-height:1.5,表示行高为字体大小的1.5倍&#xff1b; 长度单位一般也分为相对长度和绝对长度。 &#xff08;一&#xff09;绝…