如何使用Jenkins部署依赖于GIT上另一个项目的项目?

如何使用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的主项目:这是一个JavaEE项目。然后我有一个名为client project的Flex项目,它代表了上一个项目的web客户端

这两个项目都存储在一个特定的GIT存储库中(因此我为主项目javaee项目提供了一个特定的GIT存储库,为客户端项目提供了另一个特定的存储库)

这两个项目(在我的本地计算机上)以以下方式关联:

主项目包含表示客户端项目编译版本的.swf文件

大概是这样的:

\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存储库中。它旨在存储源代码。对于工件,还有其他服务,如和等等。