开发Web应用程序时,至关重要的难题是持续交付。 测试人员或用户可以通过早期使用alpha版本来促进开发过程。 设计,需求,架构或性能问题可以更快地被发现。
我将展示如何使用Maven和Jenkins来设置此过程。 目标环境托管在Tomcat7上。 源代码托管在GitHub上。 因为我是试图尽可能避免轮询的开发人员类型,所以我将展示如何通过GitHub的很酷的功能WebHooks触发此过程。
1.创建连续交货作业
创建Jenkins工作并将其与Maven集成非常容易。 会很快涵盖:
- 使用“新建项目”->“ ”创建它
- 在“源代码管理”部分中设置GitHub URL(在我的情况下,无需身份验证,因为我的GitHub存储库是公共的)
- 现在跳过“构建触发器”部分,稍后将再次介绍。
- 使用用于构建WAR文件的POM路径和目标配置“构建”部分
- 设置“构建设置”->“电子邮件通知”
保存并尝试运行Jenkins作业。 这是非常常见且基本的Jenkins作业配置。 现在,我们将设置将WAR文件部署到Tomcat7中。 但是,这里出现了困境。 有两种非常成熟的部署方式。 我将同时介绍两者,并让读者选择其中一个。
a)使用tomcat7-maven-plugin连续交付
- 首先,我们需要启用对Tomcat7的访问。 编辑$ CATALINA_HOME / conf / tomcat-users.xml (CATALINA_HOME是Tomcat的主目录),并按如下所示配置角色和用户
<role rolename="manager-script"/>
<user username="deployer" password="===PASSWORD===" roles="manager-script"/>
- 在配置文件settings.xml中为Maven配置Tomcat7凭据。 该文件通常位于<user_home> /。m2中 。
<server>
<id>tomcat-server-alpha</id>
<username>deployer</username>
<password>===PASSWORD===</password>
</server>
- 将tomcat7-maven-plugin设置到pom.xml中
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://[JENKINS-URL]/manager/text</url>
<server>tomcat-server-alpha</server>
<path>/[TOMCAT-DEPLOY-PATH]</path>
</configuration>
</plugin>
- 最后,将其他Maven目标“ tomcat7:redeploy”添加到Jenkins工作中
b)使用Jenkins Deploy插件进行持续交付
- 安装Jenkins Deploy插件
- 在构建WAR的Jenkins作业中,配置“添加构建后操作”->“向容器部署耳朵/战争”
2. Jenkins – GitHub集成
- 这里的阻止要求是让Jenkins服务器可以从Web访问。 如果出于某种原因不能这样做,则必须坚持在Jenkins中轮询源代码控制。
- 将GitHub插件安装到Jenkins中
- 在GitHub中为Jenkins生成个人访问令牌。 可以在“编辑个人资料”->“应用程序”下找到
- 设置GitHub插件以使用Jenkins中生成的令牌。 您可以在“管理Jenkins”->“配置系统”->“ GitHub Web Hook”中找到此部分。 请注意,您不需要使用密码。 API URL为“ https://api.github.com”
- 在Github中创建WebHook。 打开存储库->“设置”->“ Webhooks和服务”->“创建Webhook”
- 使用后缀为“ / github-webhook”的 Jenkins URL。 Jenkins将在您配置作业时自动替换,因此不需要为每个Jenkins作业创建GitHub挂钩
- 创建后,您可以通过“最近的交付”中的三个点来测试webhook。 HTML错误代码“ 302 Found”表示它工作正常(即使GitHub用感叹号突出显示它)。
- 最后在Jenkins工作中启用GitHub触发
而已。 Github提交现在应该导致部署到Tomcat中。
资源资源
翻译自: https://www.javacodegeeks.com/2014/03/trigger-continuous-delivery-every-github-commit.html