我该如何在Jenkins中自动化构建和部署?

8
我们正在使用Jenkins进行持续集成。我们通常在深夜才能完成构建。是否有任何自动化的方法,可以在收到邮件或者通知后自动进行构建部署?如有建议,请不吝赐教。

你能告诉我们你正在构建或部署什么吗?如果是网站,通常会考虑某种类型的存储库推送,但也可能像使用vagrant这样的工具来启动新的虚拟机并填充它一样复杂。然而,如果你正在构建一个iOS应用程序,你可以直接部署到下载服务。对于桌面应用程序,你可以部署到已知的Web位置。在使用Jenkins进行持续部署时有很多机会,但更多的信息将有助于找到正确的方向。 - gaige
@gaige:感谢您的关注。我们主要是尝试部署包含.o和其他库的rpm。我们将使用Jenkins在Linux服务器上进行部署。我的期望是通过一些脚本在Linux服务器上实现自动化部署最新可用版本的构建。 - Sujith
我有一些关于如何设置构建和部署作业的详细说明。请参阅“如何在Jenkins中从另一个作业中推广特定的构建编号?”和“使用共享工作区的Jenkins持续交付”。 - Slav
3个回答

3

在Jenkins上部署构建的一种机制是使用工件将最新的二进制文件放置在已知位置,然后启动一个新作业(仅在编译/测试阶段成功时)使用(私钥保护的)ssh或scp将工件复制到测试/生产机器上,然后执行安装。

我们在一些自动化测试中使用类似的机制。麻烦的部分是让shell命令处理ssh密钥,因此我们采取以下步骤:

eval `ssh-agent -s`
ssh-add ~/.ssh/your_private_key_here

只要将私钥放在Jenkins服务器上,公钥放在您要推送的服务器上,您就可以在脚本的其余部分中使用ssh和scp命令来执行有关该服务器的功能。如果您更喜欢从目标服务器端完全运行该过程,则可以创建一个小型脚本,在服务器上运行,检查Jenkins服务器构建的工件目录中的新文件。由于最新路径,您不必知道构建号即可执行此操作。要找到特定路径,您可以登录到Jenkins服务器(保存至少一个工件后),找到您正在使用的项目,并查看“最后成功的工件”,这将是指向工件的最近成功构建的URL。这些URL保持不变,并始终指向最近的成功构建,因此您不必担心它们会更改,除非项目名称或服务器名称更改。
注意:如果您不是为测试部署而进行此操作,则可能存在安全漏洞。在第一种机制的情况下,您的构建服务器具有允许其访问(潜在破坏性)目标的ssh密钥。在第二种机制的情况下,您信任Jenkins服务器只提供对您有益的二进制文件。但是,对于测试环境、推送到阶段等,这些技术将非常有效。

非常感谢您的回复...我有一些疑问...我们也会进行部署测试[这就是我们使用发布版本号的原因],所以在这种情况下,它只会复制文件而不是实际部署。那么有没有办法通过Jenkins按构建编号进行部署呢?如果我的理解有误,请见谅... - Sujith
@Sujith 我不确定我是否完全理解你的意思。由于Jenkins没有预定义的机制来将任意软件包部署到另一台服务器上,因此部署必须在ssh脚本中完成。但是,我不确定这是否是你要问的问题。如果您想手动部署,可以设置需要手动触发的项目。如果您想将构建编号一起传递,可以在脚本中使用构建编号作为变量,在您的ssh命令中传递它。您能否澄清您希望如何处理构建编号? - gaige

1

我知道的方法有以下几种:

  • 使用脚本:

在Jenkins配置中,您可以在执行maven目标后执行windows/shell命令。在我的情况下,我在Linux上有一个Glassfish,并通过ssh执行asadmin参数进行部署。我在服务器上安装了一个实例,遵循的流程是:停止实例、卸载应用、部署应用、启动实例(命令)。

  • 使用Maven Deploy插件:

该插件将war/ear文件部署到构建结束时正在运行的远程应用程序服务器。当前支持的容器列表包括:

Tomcat 4.x/5.x/6.x/7.x JBoss 3.x/4.x Glassfish 2.x/3.x

https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin

  • 使用Cargo:

部署插件基于此。您必须编辑pom.xml文件并使用Maven执行部署目标。

http://cargo.codehaus.org/


0

在Tomcat中,与Jenkins和Tomcat的配置:

  • 在服务器上安装并下载Jenkins,启动服务器后进入Jenkins门户网站,然后使用“新项目”创建项目,并选择pom.xml并创建Maven项目。
  • 现在转到您的项目,单击“配置”,然后选择“限制此项目可以运行的位置”,并将主服务器添加到您的级别表达式中。
  • 选择“源代码管理”,单击git并配置您的git存储库和凭据以及分支名称。
  • 选择“构建”添加Root pom:pom.xml和Goals和options:clean install -DskipTests
  • 选择“后构建操作”,然后选择“将war / ear部署到容器”
  • WAR / EAR文件:target / test.war
  • 上下文路径:test
  • 容器选择Tomcat并添加凭据
  • Tomcat URL:例如:http://localhost:8080/

更新'apache-tomcat-8.5.5 \ webapps \ manager \ META-INF \ context.xlm'文件。取消注释Value标记。然后重新启动服务器

context.xml文件

Before : 

<Context antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
     allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

After change :

<Context antiResourceLocking="false" privileged="true" >
</Context>

for auto deployment: go to 'apache-tomcat-8.5.5\conf\context.xml' and add antiResourceLocking="true" in 'Context' tag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接