如何使用 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-job 将 Main.swf 文件替换为 **\DEPLOYED-PROJECT\src\main\webapp** 我在服务器上部署的项目的路径。
我如何使用 Jenkins 做这样的事情?保持 main-project 和 client-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" 或类似的东西。
我完全是 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-job 将 Main.swf 文件替换为 **\DEPLOYED-PROJECT\src\main\webapp** 我在服务器上部署的项目的路径。
我如何使用 Jenkins 做这样的事情?保持 main-project 和 client-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" 或类似的东西。