gpt4 book ai didi

jenkins - 如何使用 Jenkins 创建工作层次结构?

转载 作者:行者123 更新时间:2023-12-04 19:40:40 25 4
gpt4 key购买 nike

我们有一系列 shell 脚本在工作,我正尝试通过使用 Jenkins 对其进行改进(以便拥有更多控制权并允许不熟悉 shell 脚本的开发人员理解并在需要时更改流程)。

我对脚本没有任何问题,基本上涉及使用 SVN 检查项目、使用 Maven 构建项目并将 war 部署到我们的容器。

但现在我正在尝试创建一个 Jenkins 作业来为我们的客户打包 Linux、Linux x86_64 和 Windows 安装程序。该脚本执行以下操作:

  1. checkout 项目(SVN);
  2. 使用测试配置文件 (Maven) 构建主项目;
  3. 将 war 复制到 Samba 共享 (smbclient);
  4. 使用生产配置文件重建项目;
  5. 更新 Linux、Linux64 和 Windows 文件夹中的版本化 (SVN) 文件夹;
  6. 复制linux文件夹下的war;
  7. 使用 Linux 文件夹创建压缩包;
  8. 将war复制到Linux64文件夹;
  9. 使用 Linux64 文件夹创建压缩包;
  10. 将 war 复制到 Windows 文件夹中;
  11. 使用在 Wine 上运行的 InnoSetup 创建 Windows 可执行文件;
  12. 将包复制到 Samba 共享。

这个脚本太复杂了,Linux、Linux64和Windows文件夹之间有很多冗余。我设想了一个改进的过程,我会使用以下文件夹结构:

libs
|-- unversioned-folder
|-- linux
| `-- specific linux files
|-- linux64
| `-- specific linux x86_64 files
`-- windows
`-- specific windows files

workspace
|-- main-project
`-- versioned-folder
|-- versioned-subfolder1
|-- versioned-subfolder2
|-- unversioned-folder (copied from libs)
| `-- main-project.war (built with Maven from the main-project)
`-- Linux or Linux64 or Windows specific folder (overwritten after each packaging)

这样,版本控制的文件夹就不会重复,我可以打包 Linux、Linux64 和 Windows 安装程序而不会出现冗余,只是覆盖每个的特定文件。

我一直在尝试使用 Jenkins,并且正在使用 Publish Over CIFS脚本第一部分的插件。但是,如果我继续使用相同的工作,我意识到它会太复杂,而且大部分步骤都将发生在后期构建部分。

理想的方法是将作业分解为更小的作业,就像在 shell 脚本中调用函数一样。现在我正在研究 Multijob plugin .

我想知道是否可以在 Jenkins 中拥有这个层次结构,共享父作业的工作区:

安装作业

  1. 检查主要项目
  2. 子任务: 创建测试项目
    1. 使用测试配置文件构建主项目
    2. 将 war 文件复制到 Windows 共享
  3. 子任务:创建生产项目
    1. 使用生产配置文件重建主要项目
  4. 子工作: 创建包
    1. 检查版本化文件夹;
    2. 将未版本化的文件夹复制到版本化的文件夹中;
    3. 将主项目war文件复制到unversioned文件夹中;
    4. 子工作: 打包 linux 安装程序
      1. 将未版本化的 Linux 特定文件复制到版本化文件夹中;
      2. 创建一个 tarball(打包)。
    5. 子工作:打包linux x86_64安装程序
      1. 复制未版本化的 linux64 特定文件;
      2. 创建一个 tarball(打包)。
    6. 子工作:打包windows installer
      1. 复制未版本化的 Windows 特定文件;
      2. 使用 InnoSetup(可能是带有 wine 的 shell 脚本)创建可执行安装程序。
    7. 将包发送到 Windows Share。

如果父作业的工作空间无法在子作业之间共享,我如何使用 Jenkins 实现与 shell 脚本相同的结果?

最佳答案

使用 Clone Workspace 插件在作业之间共享您的 .war/文件:
https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin

并使用Build Flow 并行化操作系统特定的子作业:
https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin

关于jenkins - 如何使用 Jenkins 创建工作层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com