Jenkinfile DSL如何指定目标目录

16 jenkins jenkins-pipeline

我正在探索Jenkins 2.0管道.到目前为止,我的文件非常简单.

node {
    stage "checkout"
    git([url:"https://github.com/luxengine/math.git"])

    stage "build"
    echo "Building from pipeline"
}
Run Code Online (Sandbox Code Playgroud)

我似乎找不到任何方法来设置git将checkout的目录.我也找不到与此相关的任何文件.我找到了https://jenkinsci.github.io/job-dsl-plugin/但它似乎与我在其他教程上看到的不一致.

luk*_*a5z 24

澄清

看起来您正在尝试配置管道作业(以前称为工作流程).这种类型的工作与Job DSL截然不同.

Pipeline工作的目的是:

协调可以跨越多个构建从属的长时间运行的活动.适用于构建管道(以前称为工作流程)和/或组织不易适应自由式工作类型的复杂活动.

作为工作DSL的地方:

...允许使用DSL以编程方式创建项目.将作业创建推送到脚本中可以让您自动化和标准化Jenkins安装,这与以前不同.

如果要将代码签出到特定目录,请将git步骤替换为更常规的SCM checkout步骤.最终管道配置应如下所示:

node {
    stage "checkout"
    //git([url:"https://github.com/luxengine/math.git"])
    checkout([$class: 'GitSCM', 
        branches: [[name: '*/master']], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'RelativeTargetDirectory', 
            relativeTargetDir: 'checkout-directory']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[url: 'https://github.com/luxengine/math.git']]])

    stage "build"
    echo "Building from pipeline"
}
Run Code Online (Sandbox Code Playgroud)

作为Jenkins 2.0Pipeline DSL 的未来参考,请使用内置的Snippet Generator文档.


Cro*_*oss 14

这可以通过使用dir的指令来完成:

def exists = fileExists '<your target dir>'
if (!exists){
    new File('<your target dir>').mkdir()
}
dir ('<your target dir>') {
  git url: '<your git repo address>'
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。所要问的所有问题是如何为git checkout步骤指定目录。 (2认同)
  • 实际上,根据我的经验,无需检查文件夹是否存在,如果不存在,dir()似乎会创建该文件夹。这是比必须检查属性的检举更好的解决方案。 (2认同)

khm*_*ise 3

首先明确您正在使用 Jenkins Job DSL。

你可以这样做:

    scm {
        git {
            wipeOutWorkspace(true)
            shallowClone(true);
            remote {
                url("xxxx....")
                relativeTargetDir('checkout-folder')
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

上述地址使您有机会简单地输入左上角区域,例如“scm”,然后它将显示可以使用哪些关系“scm”。您可以选择“scm-freestylejob”,然后单击“***”,您可以看到详细信息。

Jenkins Job DSL 的一般起点在这里:

您当然可以在 SO 或 Google 论坛上提问: