如何使用Jenkins创建作业层次结构?

时间:2014-02-25 20:44:57

标签: jenkins

我正在尝试通过使用Jenkins来改进一系列shell脚本(为了获得更多控制并允许不熟悉shell脚本的开发人员在需要时理解和更改过程)。

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

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

  1. 检查项目(SVN);
  2. 使用测试配置文件(Maven)构建主项目;
  3. 将战争复制到Samba Share(smbclient);
  4. 使用生产配置文件重建项目;
  5. 更新Linux,Linux64和Windows文件夹中的版本化(SVN)文件夹;
  6. 复制linux文件夹中的war;
  7. 使用Linux文件夹创建tarball;
  8. 复制Linux64文件夹中的战争;
  9. 使用Linux64文件夹创建tarball;
  10. 将战争复制到Windows文件夹中;
  11. 使用在Wine上运行的InnoSetup创建Windows可执行文件;
  12. 将软件包复制到Samba共享。
  13. 这个脚本太复杂了,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安装程序
        1. 复制未版本控制的Windows特定文件;
        2. 使用InnoSetup创建可执行安装程序(可能是带有wine的shell脚本)。
      7. 将软件包发送到Windows Share。
    5. 如果父作业的工作空间无法在子作业之间共享,我怎样才能获得与Jenkins的shell脚本相同的结果?

1 个答案:

答案 0 :(得分:0)

使用克隆工作区插件在各个作业中共享.war /文件:
https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin

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