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

标签 jenkins

我们有一系列 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/

相关文章:

browser - 如何在不通过 Jenkins 服务器打开浏览器的情况下运行 Protractor e2e 测试?

java - 如何限制 Jenkins 子进程?

jenkins - 编写 Jenkins 管道作业脚本

svn - Jenkins Subversion 错误 - E200015 : No credential to try. 身份验证失败

linux - 从 Jenkins 中运行的脚本通过远程 ssh 将文件内容分配给变量

Jenkins 从计划中排除日期

jenkins - 如何获取maven命令的输出

docker - 无法使用 Artifactory 插件将 Docker 镜像推送到 Jenkins 管道中的 Artifactory

groovy - 为什么这个 Groovy 脚本在 Jenkins 中无法获取作业参数?

jenkins - 轮询忽略多分支管道中某些路径中的提交