如何使用Jenkins部署依赖于GIT上另一个项目的项目?
我对詹金斯绝对是新手,我有以下问题 我有两份工作,分别代表两个相互关联的不同项目 我尤其有以下情况: 我有一个名为main project的主项目:这是一个JavaEE项目。然后我有一个名为client project的Flex项目,它代表了上一个项目的web客户端 这两个项目都存储在一个特定的GIT存储库中(因此我为主项目javaee项目提供了一个特定的GIT存储库,为客户端项目提供了另一个特定的存储库) 这两个项目(在我的本地计算机上)以以下方式关联: 主项目包含表示客户端项目编译版本的.swf文件 大概是这样的:如何使用Jenkins部署依赖于GIT上另一个项目的项目?,jenkins,continuous-integration,jenkins-pipeline,continuous-deployment,jenkins-workflow,Jenkins,Continuous Integration,Jenkins Pipeline,Continuous Deployment,Jenkins Workflow,我对詹金斯绝对是新手,我有以下问题 我有两份工作,分别代表两个相互关联的不同项目 我尤其有以下情况: 我有一个名为main project的主项目:这是一个JavaEE项目。然后我有一个名为client project的Flex项目,它代表了上一个项目的web客户端 这两个项目都存储在一个特定的GIT存储库中(因此我为主项目javaee项目提供了一个特定的GIT存储库,为客户端项目提供了另一个特定的存储库) 这两个项目(在我的本地计算机上)以以下方式关联: 主项目包含表示客户端项目编译版本的.s
\main-project\src\main\webapp\Main.swf
因此,正如您在我的**主项目的\src\main\webapp**目录中所看到的那样,被手动放入main.swf文件,该文件表示Flex客户端项目的编译
好的,所以我的问题是:我有两份与这些项目相关的工作
1) 主项目作业:这是Jenkins作业,在主项目上编译和部署
2) 客户端项目作业:我认为此作业不应该做任何事情(它只检索客户端项目的最新编译版本
我必须以这种方式自动化构建过程:
之后,dveloper推送GIT一个新版本的主项目将主项目作业编译并部署到服务器上。此作业结束后,启动客户端项目作业,将main.swf文件替换到**\DEPLOYED-project\src\main\webapp**路径中在服务器上部署的项目上
我如何使用Jenkins做这样的事情?保持与最新版本的主项目和客户端项目的同步是一个好的解决方案吗?>我如何使用Jenkins做这样的事情
对我来说,这似乎是可以很容易地完成或类似的东西。
只需将构建后步骤在其他项目上触发/调用构建
添加到主项目作业,它将启动客户端项目作业
如果出于某些原因,这还不够,请添加所需工作流程的更多详细信息。这里有一些您可能希望探索的线索 1.使用嵌入式swf部署主要项目作业 由于您的主项目似乎严重依赖于您的swf文件(在没有swf文件的情况下可能不应该部署它),您难道不能获取并将swf文件作为编译的主项目工件的一部分吗?您部署的主项目在部署时已经包含swf文件,这似乎是合乎逻辑的 使用Jenkins管道,这样的事情很容易做到:
stage("Build main project") {
// your build step
}
stage("Copy client project to main webapp") {
git 'your-git/client-project'
sh "cp client-project/generated-swf /main-project/src/main/webapp/Main.swf"
}
stage("Deploy main project") {
// your deploy step
}
2.作为主作业的一部分复制swf文件
如果在部署之前无法将swf文件直接集成到主项目中,您仍然可以使用相同的作业来完成此操作,同样,如果主项目严重依赖swf文件,您可能希望将其作为作业的一部分进行复制。在这种情况下,只有复制步骤会发生更改,您需要使用一些scp
命令来复制该文件远程服务器上部署的应用程序的swf文件
大致如下:
stage("Build main project") {
// your build step
}
stage("Copy client project to main webapp") {
git 'your-git/client-project'
sh "scp client-project/generated-swf user@deployServer:/main-project/src/main/webapp/Main.swf"
}
stage("Deploy main project") {
// your deploy step
}
3.作为单独作业的一部分复制swf文件
如果确定要将复制操作作为另一个作业的一部分(例如,如果有时需要手动触发作业以在服务器上运行的webapp中复制修改后的swf文件),则可以从主项目作业触发另一个作业:
主要项目工作
stage("Build main project") {
// your build step
}
stage("Deploy main project") {
// your deploy step
}
stage("Copy client project to main webapp") {
build job: copy-client-project
}
复制客户端项目
stage("Copy client project to main webapp") {
git 'your-git/client-project'
sh "scp client-project/generated-swf user@deployServer:/main-project/src/main/webapp/Main.swf"
}
最后一个细节:如果您决定使用单独的作业进行复制,我建议不要将该作业称为“客户机项目作业”,这通常意味着一个标准的构建/部署作业,而是将其命名为“复制客户机文件”或者类似的东西。Ok,但客户端项目构建不执行具体构建。它只需从GIT检索Main.swf文件的最新版本,并将其放入“\Main project\src\Main\webapp\”中即可在上一步部署的主项目的文件夹。我可以这样做吗?@blabla,是的,您可以。只要两个构建都在一个从机上执行,就很容易在“执行shell”步骤中启动
cp
命令(或在“执行Windows批处理命令”中启动COPY
)。如果这些构建存在于不同的从属服务器上,您将不得不使用类似的服务。尽管我不得不提到,您可能不希望将工件存储在git存储库中。它旨在存储源代码。对于工件,还有其他服务,如和等等。