学院网站建设规划,wordpress 防火墙,酒店门户网站建设背景,网站建设样式最近#xff0c;我正在整理一个快速启动的Maven项目#xff0c;以展示一种组织JBoss Fuse项目的可行方法。 该项目可在Github上找到#xff1a; https #xff1a; //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 #xff08; James Rawlings#xff09… 最近我正在整理一个快速启动的Maven项目以展示一种组织JBoss Fuse项目的可行方法。 该项目可在Github上找到 https //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯·罗林斯 James Rawlings一起工作中学到的一点点进展 该项目提出了一种在Maven多模块项目中组织代码库的方法。 由于我收到的反馈和建议该项目正在不断发展中 但是关键是要显示一种组织项目的所有工件脚本和配置的方法。 在ci文件夹中您将找到子文件夹例如features或karaf_scripts 这些子文件夹可能最终在每个项目中创建文件并带有内联注释以帮助您根据特定需要进行调整和自定义 。 该项目还利用Fabric8来处理一组受管理的OSGi容器并利用其所有功能来组织工作流部署的配置和版本控制。 在这篇博文中我将向您展示如何在一个非常典型的开发设置包括JBoss Fuse Maven Git Nexus和Jenkins中部署该示例项目。 之所以决定涵盖此主题是因为我发现很多时候我遇到了优秀的开发人员他们告诉我即使他们意识到持续集成基础架构的附加值也没有时间致力于这项活动 。 没有多余的时间他们只专注于发展。 我不希望您对此话题进行宣传也不要试图告诉您他们应该做什么。 我喜欢相信他们并相信他们知道他们的项目优先事项 并且他们接受了可用时间积压和每项活动带来的总体收益之间的权衡。 同样 我喜欢相信所有人都同意对于大型和长期项目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/ 因为它们显示了执行的步骤所以它们是一种方便且可重用的方式来运送可执行文件。 它们也可以看作是记录安装和配置过程的一种方式 。 如上所述 您不一定需要它们 。 您可以自己手动安装和配置服务。 它们只是一种经过验证的开放方式可以节省您一些时间或向您展示 我做的方式 。 让我们开始描述示例持续集成设置的组件 JBoss保险丝6.1 这是我们要部署到的运行时 。 它放在专用的盒子里。 它与Nexus交互作为我们生成和发布的工件的来源。 关系 这是我们用来存储从代码库生成的二进制文件的软件。 JBoss Fuse可以访问它 JBoss Fuse可以从中下载工件但Jenkins可以访问它并在其上发布二进制文件这是成功构建工作的最后一步。 詹金斯 这是我们的构建作业调用程序 。 如果使用Git签出的代码成功构建它将发布其输出到Nexus 并构建其输出。 Git服务器 它是远程代码存储库持有人。 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 arwx /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作为密码。 詹金斯 Jenkins是我们将用来构建项目的工作计划程序 。 我们希望以这样一种方式配置Jenkins使其能够直接连接到我们的git repo以下载项目源。 为此我们需要一个附加插件Git Plugin 。 显然我们还需要在盒子上安装java和maven 。 由于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_ip8080 / 默认情况下它是在单用户模式下配置的对于我们的演示来说就足够了。 您可能需要验证http// your_ip8080 / configure以检查JDKMaven和git的值是否看起来不错。 如果您在Jenkins之前已经安装了那些软件通常会自动将它们拾取。 然后您需要安装Git插件 http// your_ip8080 / pluginManager 配置完所有内容后在重新启动 Jenkins实例之后我们将能够看到表单中的新选项该选项允许我们创建Maven构建作业。 在“ 源代码管理 ”部分下现在有了git选项。 只需提供SSH服务器的坐标即可例如 ssh://fuse172.17.0.5/home/fuse/fuse_scripts.git 在“ 构建 ”部分的“ 目标和选项”下 我们需要明确告知Maven我们要调用deploy阶段并提供Nexus实例的IP地址 clean deploy -DskipTests -Dip.nexus172.17.0.3 最后一个配置步骤是在高级maven属性中指定一个不同的maven设置文件 该文件与源代码一起存储 https://github.com/paoloantinori/fuse_ci/blob/master/my_settings.xml 当其中包含工件时其中包含要显示给Nexus的用户和密码。 配置已经完成但是我们还需要其他步骤使Jenkins与Git一起工作 。 由于我们使用SSH作为传输协议因此在首次连接SSH服务器时 将要求我们确认要连接的服务器是安全的并且其指纹是我们期望的指纹 。 该挑战操作将阻止构建作业因为是批处理作业不会有任何人确认SSH凭据。 为了避免所有这些一个窍门是通过SSH连接到Jenkins框成为用于运行Jenkins进程在我的情况下为jenkins的用户然后从那里手动连接到ssh git服务器以执行标识操作以交互方式进行因此将来不再需要 ssh fuseIP_GIT_SERVER
The authenticity of host [172.17.0.2]:22 ([172.17.0.2]:22) cant 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 gitgithub.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的确认。 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/snapshotsidsample-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:source osgi:install或任何其他需要在Nexus上发布工件的命令。 结论 如多次提到的那样这只是可能的工作流程 也是这些平台之间交互的示例。 您的团队可能遵循不同的程序或使用不同的工具。 也许您已经基于新的Fabric8 Maven插件实现了更高级的流程。 无论如何我邀请对此主题感兴趣的所有人发表评论或一些其他方法的链接并帮助所有人分享我们的经验 。 翻译自: https://www.javacodegeeks.com/2014/05/continuous-integration-with-jboss-fuse-jenkins-and-nexus.html