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

How can I use Jenkins to deploy a project that depends on another project on GIT?

我完全是 Jenkins 的新手,我遇到了以下问题。

我有 2 个工作,代表 2 个相互关联的不同项目。

特别是我有以下情况:

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

这两个项目都存储在特定的 GIT 存储库中(所以我有一个特定的 GIT 存储库用于 main- project Java EE 项目和 client-project) 的另一个特定存储库。

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

main-project 包含 .swf 文件,代表 client-project[ 的编译版本=66=].

像这样:

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

所以你可以看到我的 **main-project\src\main\webapp** 目录是手动放置的 Main.swf 代表 Flex client-project.

编译的文件

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

1) main-project-job: 即在服务器上编译和部署 main-project 项目的 Jenkins 作业.

2) client-project-job: 这个工作我认为应该什么都不做(它只检索 client-project[= 的最新编译版本66=] 项目。

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

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

我如何使用 Jenkins 做这样的事情?保持 main-projectclient-project 的最新版本同步是一个很好的解决方案吗?

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

我觉得这可以用 Parametrized Trigger Plugin 或类似的东西轻松完成。 只需将 post-build 步骤 Trigger/call builds on other projects 添加到 main-project-job 即可开始 client-project-job

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

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

1。使用嵌入式 swf

部署 main-project-job

由于您的 main-project 似乎在很大程度上依赖于您的 swf 文件(如果没有 swf 文件,它可能不会被部署),您不能只获取并将 swf 文件作为已编译 main-project神器?您部署的 main-project 在部署时已经包含 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 文件直接集成到 main-project,你仍然可以使用相同的工作来做,如果主项目严重依赖 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 文件,在服务器上),您可以从 main-project-job 触发另一个作业:

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
}

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" 这通常意味着标准 build/deploy 作业,而我会命名它"copy-client-files" 或类似的东西。