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

时间:2017-02-16 09:28:45

标签: jenkins continuous-integration jenkins-pipeline continuous-deployment jenkins-workflow

我在 Jenkins 中绝对是新的,我有以下问题。

我有两个代表彼此相关的不同项目的工作。

特别是我有以下情况:

我有一个名为 main-project 的主项目:这是一个Java EE项目。然后我有一个名为 client-project 的Flex项目,代表上一个项目的Web客户端。

这两个项目都存储在特定的 GIT 存储库中(因此我有一个特定的GIT存储库用于主项目 Java EE项目和另一个特定的存储库客户项目)。

2个项目(在我的本地机器上)以下列方式相关:

主项目包含 .swf 文件,该文件代表客户端项目的编译版本。

这样的事情:

\main-project\src\main\webapp\Main.swf

因此,您可以看到我的**主项目的 \ src \ main \ webapp **目录被手动推送代表的 Main.swf 文件Flex 客户端项目的编译。

好的,我的问题是:我有2个与这些项目相关的 Jenkins 工作。

1) main-project-job:这是在主项目项目上编译和部署的Jenkins作业。

2)客户 - 项目 - 工作:这项工作我认为应该什么都不做(它只检索客户端项目项目的最新编译版本。

我必须以这种方式自动化构建过程:

之后,开发人员推动 GIT 新版主项目项目 main-project-job 编译并部署它在服务器上。当此作业结束时,启动 client-project-job ,将 Main.swf 文件替换为** \ DEPLOYED-PROJECT \ src \ main \ webapp **路径我在服务器上部署的项目。

如何使用Jenkins做这样的事情?这是一个干净的解决方案,以保持同步最新版本的主项目客户端项目

2 个答案:

答案 0 :(得分:1)

>如何使用Jenkins做这样的事情?

听起来像我可以用Parametrized Trigger Plugin或类似的东西轻松完成。 只需将构建后步骤Trigger/call builds on other projects添加到 main-project-job ,这将启动 client-project-job

如果由于某种原因这还不够,请在需要的工作流程中添加更多详细信息。

答案 1 :(得分:0)

这里有一些您可能想要探索的线索。

1。使用嵌入式swf

部署main-project-job

由于您的主项目似乎在很大程度上依赖于您的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文件复制为单独作业的一部分

如果您确定要将复制操作作为另一个作业的一部分(让我们说,如果您有时需要手动触发作业以在正在运行的Web应用程序中复制已修改的swf文件,则服务器),您只需从main-project-job触发另一个作业:

主要项目在职

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"
}

最后一个细节:如果您决定使用单独的作业进行复制,我建议不要调用该作业" client-project-job"这通常意味着标准的构建/部署工作,而不是我将它命名为#34; copy-client-files"或类似的东西。