jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

jenkins jboss

最近,我正在整理一个快速启动的Maven项目,以展示组织JBoss Fuse项目的可能方法。

该项目可以在Github上找到: https : //github.com/paoloantinori/fuse_ci

这是我与朋友詹姆斯·罗林斯 ( James Rawlings)合作后所学到的一点点发展

该项目提出了一种在Maven多模块项目中组织代码库的方法。

感谢我收到的反馈和建议,该项目正在不断发展; 但是关键是要显示一种组织项目的所有工件,脚本和配置的方法。

ci文件夹中,您会发现子文件夹(例如featureskaraf_scripts ,这些子文件夹可能最终在每个项目中创建文件,并带有内联注释,可根据您的特定需求帮助您进行调整和自定义

该项目还利用Fabric8处理一组托管的OSGi容器的创建,并利用其所有功能来组织工作流,部署的配置和版本控制。

在这篇博文中,我将向您展示如何在一个非常典型的开发设置(包括JBoss Fuse , Maven , Git , NexusJenkins)中部署该示例项目。

之所以决定涵盖此主题,是因为我发现很多时候我遇到了优秀的开发人员,他们告诉我,即使他们知道持续集成基础架构的附加值,也没有时间致力于这项活动 。 没有多余的时间,他们只专注于发展。

我不希望您对此话题进行宣传,也不要试图告诉您他们应该做什么。 我喜欢相信他们,并相信他们知道他们的项目优先事项 ,并且他们接受了可用时间,积压和每项活动带来的总体收益之间的权衡。 同样, 我喜欢相信所有人都同意,对于大型和长期项目,CI最佳实践绝对是必须做的事情 ,而且没有人需要争论其价值。

考虑到所有这些,我想展示一种可能的设置和工作流程,以展示花费一小时的时间来获得可以持续更长的利益的速度

我不会介绍分步说明。 但是为了证明所有这些工作正常,我创建了一个使用Docker的bash脚本,该脚本将演示如何轻松地编写脚本 ,更重要的是, 它们确实有效!

如果您想直接跳到最后,可以在这里找到脚本:

https://github.com/paoloantinori/fuse_ci/blob/master/ci/deploy_scripts/remote_nexus.sh

它使用了一些我创建并作为Docker Index上的受信任版本发布的Docker映像:

https://index.docker.io/u/pantinor/fuse/

https://index.docker.io/u/pantinor/centos-jenkins/

https://index.docker.io/u/pantinor/centos-nexus/

因为它们显示了执行的步骤,所以它们是一种方便且可重用的方式来运送可执行文件。 它们也可以看作是记录安装和配置过程的一种方式

如上所述, 您不一定需要它们 。 您可以自己手动安装和配置服务。 它们只是一种经过验证的开放方式,可以节省您一些时间或向您展示
我做的方式

让我们开始描述示例持续集成设置的组件:

  1. JBoss保险丝6.1
  2. 这是我们要部署到的运行时 。 它放在专用的盒子里。 它与Nexus交互,作为我们生成和发布的工件的来源。

  3. 关系
  4. 这是我们用来存储从代码库生成的二进制文件的软件。 JBoss Fuse可以访问它, JBoss Fuse可以从中下载工件, Jenkins可以访问它,并在其上发布二进制文件,这是成功构建工作的最后一步。

  5. 詹金斯
  6. 这是我们的构建作业调用程序 。 如果使用Git签出的代码成功构建,它就会将其输出发布到Nexus ,并构建其输出。

  7. Git服务器
  8. 它是远程代码存储库持有人。 Jenkins可以访问它以下载我们要构建的最新版本的代码,并且当所有开发人员共享他们的代码以及要在Continous Integration服务器上进行构建时,所有开发人员都将使用它。 在我们的例子中,git服务器只是一个通过ssh访问的文件系统

未命名
http://yuml.me/edit/7e75fab5

吉特

首先要做的是设置git充当我们的源代码管理( SCM )。
您可能会猜到,从SVN到Mercurial,我们可能都使用过其他所有类似的软件来完成这项工作,但是我更喜欢git因为它是最受欢迎的选择之一,并且因为它是与Fabric8配置直接交互的官方支持工具
我们对git要求不高。 我们只需要一个文件系统来存储我们的共享代码,以及一个允许访问该代码的传输服务 。 为了简单起见,我决定使用SSH作为传输协议 。 这意味着在将要存储代码的盒子上,我们只需要启动sshd守护程序,一些有效用户以及他们可以访问的文件夹。 就像是:

yum install -y sshd git
service sshd start
adduser fuse
mkdir -p /home/fuse/fuse_scripts.git
chmod a+rwx /home/fuse/fuse_scripts.git # or a better stratey based on guid

唯一的git特定步骤是使用初始化git存储库

git init --bare /home/fuse/fuse_scripts.git

关系

Nexus OSS是一个存储库管理器,可用于存储Maven工件。
它作为Java Web应用程序实现。 因此, 安装Nexus非常简单
多亏了Jetty的嵌入式实例为其提供了支持,所以只需提取分发存档并启动二进制文件即可:

wget http://www.sonatype.org/downloads/nexus-latest-bundle.tar.gz /tmp/nexus-latest-bundle.tar.gz
tar -xzvf /tmp/nexus-latest-bundle.tar.gz -C /opt/nexus
/opt/nexus/nexus-*/bin/nexus

Nexus启动后,默认情况下将在以下端点上可用: http:// your_ip / 8081 / nexus,其中admin作为用户, admin123作为密码。
关联1

詹金斯

Jenkins是我们将用来构建项目的工作计划程序 。 我们希望以这样一种方式配置Jenkins,使其能够直接连接到我们的git repo来下载项目源。 为此,我们需要一个附加插件Git Plugin 。 显然,我们还需要在盒子上安装javamaven 。 由于Jenkins配置由涉及与多个管理页面的交互的各个步骤组成,因此,我仅对需要执行的重要步骤提供一些提示 。 出于这个原因, 我强烈建议您检查我的完全自动化脚本 ,该脚本可以完全自动化 。 就像Nexus一样,Jenkins被实现为Java Web应用程序。 因为我喜欢使用Centos或Fedora之类的RHEL兼容发行版 ,所以我以简化的方式安装Jenkins。 与其像Nexus那样手动提取存档,不如定义一个新的yum repo ,让yum为我处理安装和配置即服务:

wget http://pkg.jenkins-ci.org/redhat/jenkins.repo -O /etc/yum.repos.d/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
service jenkins start

Jenkins启动后,您将在此处找到它的Web界面: http:// your_ip:8080 /
默认情况下,它是在单用户模式下配置的,对于我们的演示来说就足够了。 您可能需要验证http:// your_ip:8080 / configure以检查JDK,Maven和git的值是否看起来不错。 如果您在Jenkins之前已经安装了那些软件,则通常会自动将它们拾取。 然后,您需要安装Git插件 : http:// your_ip:8080 / pluginManager
外挂程式 配置完所有内容后,在重新启动 Jenkins实例之后,我们将能够看到表单中的新选项,该选项允许我们创建Maven构建作业。 在“ 源代码管理 ”部分下,现在有了git选项。 只需提供SSH服务器的坐标即可,例如:

ssh://fuse@172.17.0.5/home/fuse/fuse_scripts.git


工作1

在“ 构建 ”部分的“ 目标和选项”下 ,我们需要明确告知Maven我们要调用deploy阶段,并提供Nexus实例的IP地址:

clean deploy -DskipTests -Dip.nexus=172.17.0.3

最后一个配置步骤是在高级maven属性中指定另一个maven设置文件 ,该文件与源代码一起存储:

https://github.com/paoloantinori/fuse_ci/blob/master/my_settings.xml

当其中包含工件时,其中包含要显示给Nexus的用户和密码。

工作2

配置已经完成,但是我们还需要其他步骤使Jenkins与Git一起工作

由于我们将SSH用作传输协议,因此在首次连接SSH服务器 ,将要求我们确认要连接的服务器是安全的,并且其指纹是我们期望的指纹 。 该挑战操作将阻止构建作业,因为是批处理作业,不会有任何人确认SSH凭据。

为了避免所有这些,一个窍门是通过SSH连接到Jenkins框,成为用于运行Jenkins进程(在我的情况下为jenkins的用户,然后从那里手动连接到ssh git服务器,以执行标识操作以交互方式进行,因此将来不再需要:

ssh fuse@IP_GIT_SERVER
The authenticity of host '[172.17.0.2]:22 ([172.17.0.2]:22)' can't be established.
DSA key fingerprint is db:43:17:6b:11:be:0d:12:76:96:5c:8f:52:f9:8b:96.
Are you sure you want to continue connecting (yes/no)?

我使用Jenkins码头工人映像的另一种方法是完全禁用SSH指纹识别 ,这种方法对您来说可能不太安全

mkdir -p /var/lib/jenkins/.ssh ;  
printf "Host * \nUserKnownHostsFile /dev/null \nStrictHostKeyChecking no" >> /var/lib/jenkins/.ssh/config ; 
chown -R jenkins:jenkins /var/lib/jenkins/.ssh

如果一切配置正确,Jenkins将能够自动下载我们的项目,进行构建并将其发布到Nexus。

但…

在此之前,我们需要开发人员将代码推送到git,否则将没有任何源文件可以构建! 为此,您只需要克隆我的存储库,配置一个附加的远程存储库(我们的私有git服务器)并推送:

git clone git@github.com:paoloantinori/fuse_ci.git
git remote add upstream ssh://fuse@$IP_GIT/home/fuse/fuse_scripts.git
git push upstream master

此时,您可以在Jenkins上触发构建作业。 如果是第一次运行,则Maven将下载所有依赖项,因此可能需要一段时间 。 如果一切成功,您将收到确认您的工件发布到Nexus的确认。

连结2

JBoss保险丝

现在,我们的Nexus服务器已填充了根据我们的代码库构建的Maven工件,我们只需要告诉我们的Fuse实例即可将Nexus用作Maven远程存储库。 教我们如何做:在karaf壳中,我们需要更改属性的值,

fabric:profile-edit  --pid io.fabric8.agent/org.ops4j.pax.url.mvn.repositories=\"http://172.17.0.3:8081/nexus/content/repositories/snapshots/@snapshots@id=sample-snapshots\" default

现在我们可以使用以下命令验证集成是否完成:

cat  mvn:sample/karaf_scripts/1.0.0-SNAPSHOT/karaf/create_containers

如果一切正常,您将看到类似于以下的输出:

# create broker profile
fabric:mq-create --profile $BROKER_PROFILE_NAME $BROKER_PROFILE_NAME
# create applicative profiles
fabric:profile-create --parents feature-camel MyProfile# create broker
fabric:container-create-child --jvm-opts "$BROKER_01_JVM" --resolver localip --profile $BROKER_PROFILE_NAME root broker# create worker
fabric:container-create-child --jvm-opts "$CONTAINER_01_JVM" --resolver localip root worker1
# assign profiles
fabric:container-add-profile worker1 MyProfile

这意味着寻址提供Maven坐标的karaf脚本效果很好,现在您可以使用shell:sourceosgi:install或任何其他需要在Nexus上发布工件的命令。

结论

如多次提到的那样,这只是可能的工作流和这些平台之间交互的示例。
您的团队可能遵循不同的程序或使用不同的工具。
也许您已经基于新的Fabric8 Maven插件实现了更高级的流程。 无论如何,我邀请对此主题感兴趣的所有人发表评论或一些其他方法的链接,并帮助所有人分享我们的经验

翻译自: https://www.javacodegeeks.com/2014/05/continuous-integration-with-jboss-fuse-jenkins-and-nexus.html

jenkins jboss

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

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

相关文章

完全禁用Microsoft Compatibility Telemetry

完全禁用Microsoft Compatibility Telemetry Win S 中搜索 任务计划程序 /Microsoft/Windows/Application Experience 禁用 Microsoft Compatibility Appraiser 如果不管用 服务里禁用 Diagnostic Policy Service

第19次csp认证 202006-2 稀疏向量(C++)

题目 分析 本题需要计算的是两个n维向量的内积&#xff0c;只需计算两者对应的稀疏向量index相同的分量乘积&#xff0c;然后累加就可以了。 向量的一个分量包含index和value&#xff0c;使用struct来存储比较方便。n<109&#xff0c;a,b<5 * 105&#xff0c;|ui| * |v…

解决Windows 10 CPU占用高风扇吵问题

很多笔记本用户在升级到Windows 10后&#xff0c;都遇到了这样一个问题&#xff0c;那就是Windows 10的CPU占用明显高于Windows 7。这个问题对于台式机可能还算不了什么&#xff0c;顶多就是偶尔卡一下罢了。可由于笔记本大多采用变速风扇&#xff0c;CPU温度飙高时&#xff0c…

知识图谱 图数据库 推理_图数据库的知识表示与推理

知识图谱 图数据库 推理图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅&#xff0c;有效的解决方案。 要了解这种说法&#xff0c;我们必须首先了解什么是图形。 图是一种数据结构。 图数据结构的类型很多&#xff0c;但出于本文的目的&#xff0c;我们将重点介绍…

java状态模式和策略模式_Java状态和策略设计模式之间的差异

java状态模式和策略模式为了在Core Java应用程序中正确使用状态和策略设计模式&#xff0c;对于Java开发人员清楚地了解它们之间的区别很重要。 尽管状态和策略设计模式的结构相似&#xff0c;并且都基于开放式封闭设计原则&#xff0c;从SOLID设计原则表示为“ O”&#xff0c…

正斜杠/和反斜杠\的区别

近来研究源码时发现&#xff0c;常常在路径中出现正斜杠“/”和反斜杠“\”&#xff0c;之前就一直不胜其扰&#xff0c;所幸查资料把它一次弄懂&#xff0c;求个明白。在这里做个记录。 我认真搜了一下&#xff0c;发现问这个问题的人还不少&#xff0c;知乎上也有提问的。来…

如何将Java对象转换为JSON字符串

当学习如何编写基于Java的软件时&#xff0c;开发人员遇到的第一个障碍就是如何将其代码与其他软件连接。 这通常是JSON的来源。尽管您可能是Java向导&#xff0c;但JSON是另一种动物。 无论如何&#xff0c;这篇博客文章解释了完成工作所需的一切。 Java对象是数据和处理可用…

C++迭代器(Iterator)详解

迭代器&#xff08;Iterator&#xff09;的介绍 背景&#xff1a; 指针可以用来遍历存储空间连续的数据结构&#xff0c;但是对于存储空间费连续的&#xff0c;就需要寻找一个行为类似指针的类&#xff0c;来对非数组的数据结构进行遍历。定义&#xff1a;迭代器是一种检查容器…

Java中的责任链设计模式

在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 “责任链”设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c;如果处理程序无…

硒测试可实现有效的测试自动化

尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然以大量的用户群为主导。 在部署之前&#xff0c;企业正在快速关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然主要是手动过程。 但是将测试自…

C++ map用法总结(整理)

1&#xff0c;map简介 map是STL的一个关联容器&#xff0c;它提供一对一的hash。 第一个可以称为关键字(key)&#xff0c;每个关键字只能在map中出现一次&#xff1b;第二个可能称为该关键字的值(value)&#xff1b; map以模板(泛型)方式实现&#xff0c;可以存储任意类型的…

带有Spring Cloud Config和JHipster的Java微服务

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 如今&#xff0c;使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最…

如何在Java中使用Lombok删除样板安装程序获取器

你好朋友&#xff0c; 一次又一次反对Java的观点之一是&#xff0c;我们必须写很多样板 我们简单的POJO类的setter和getter形式的代码&#xff0c;不必要地增加了 我们代码的长度。 为了解决这个问题&#xff0c;有一个名为Project Lombok的开源项目可以解决这个问题。 通过…

Dev-C++使用技巧1(亲测)(超详细)(安装过程、修改语言、新建项目、配置C++ 11、开启警告信息和调试信息)

前言 Dev-C是一款内存占用小&#xff0c;支持C/C&#xff0c;支持调试&#xff0c;可以一键编译、运行的IDE&#xff08;集成开发环境&#xff09;。 下载链接&#xff1a;Dev-C - Download 如果上面那个不行或者下载比较慢&#xff0c;可以点链接: Dev-Cpp 提取码: xaby 。 …

从网络虚拟化,看智能网卡发展史

5G的到来无疑将加速网络虚拟化的进程&#xff0c;在电信领域&#xff0c;网络虚拟化不仅在核心网&#xff0c;也在网络的边缘。但是&#xff0c;仅仅通过软件解决方案不能提供足够的网络可靠性和服务质量&#xff0c;而具有高级可编程功能智能网卡&#xff08;Smart NIC&#x…

Dev-C++使用技巧2(亲测)(更改字体和颜色、自动保存、快捷键选项、一键排版)

更改字体和颜色 顶部菜单栏->工具->编辑器选项。 更改字体 当前选项卡->显示&#xff0c;字体word有的基本都有&#xff0c;华文楷体、宋体&#xff0c;幼圆之类。西文字体默认字体Consloas就不错&#xff0c;中文的话幼圆、新宋体都挺不错。 幼圆效果&#xff1…

深入浅出全面解析RDMA

RDMA(RemoteDirect Memory Access)技术全称远程直接内存访问&#xff0c;就是为了解决网络传输中客户端与服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机&#xff0c;无需双方操作系统的介入。这允许高吞吐、低延迟的网络通信&#xff0c;…

hypervisor介绍

hypervisor&#xff1a;一种运行在物理服务器和操作系统之间的中间层软件&#xff0c;可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统&#xff0c;可以协调访问服务器上的所有物理设备和虚拟机&#xff0c;所以又称为虚拟…

Selenium WebDriver中的TestNG侦听器及示例

Java提供了不同的接口&#xff0c;使您可以修改TestNG行为。 这些接口在Selenium WebDriver中进一步称为TestNG侦听器。 TestNG Listeners还允许您根据项目要求自定义测试日志或报告。 Selenium WebDriver中的TestNG侦听器是侦听某些事件并跟踪测试执行情况的模块&#xff0c;…

Ubantu键盘快捷键

Ubuntu系统 长按"Win"键可打开快捷键提示界面