22

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

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

    stage "build"
    echo "Building from pipeline"
}

我似乎找不到任何方法来设置 git 将结帐到的目录。我也找不到任何与此相关的文档。我找到了https://jenkinsci.github.io/job-dsl-plugin/但它似乎与我在其他教程中看到的不匹配。

4

5 回答 5

30

澄清

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

Pipeline作业的目的是:

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

作为 Job DSL:

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

解决方案

如果您想将代码签出到特定目录,则将gitstep 替换为更通用的 SCMcheckout步骤。最终管道配置应如下所示:

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"
}

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

于 2016-04-05T20:06:06.807 回答
24

这可以通过使用 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>'
}
于 2017-05-08T16:03:21.480 回答
3
    pipeline {

      agent any
      stages{
        stage("Checkout") {
            steps {
                    dir('def exists = fileNotExists \'git\'') {
                      bat label: '', script: 'sh "mkdir.sh'
                    }
                    dir ('cm') {
                        git branch: 'dev',
                        credentialsId: '<your credential id>',
                        url: '<yours git url>'
                    }
                }
            } //End of Checkout stage
        stage("TestShellScript") {
            steps {
                bat label: '', script: 'sh "PrintNumber.sh"'
            }
          }
        }//End of stages
    } // End of pipeline


Note: cat mkdir.sh
#!/bin/bash
#Create a directory
mkdir git
于 2019-11-27T05:23:28.927 回答
3

首先明确您使用的是 Jenkins Job DSL。

你可以这样做:

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

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

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

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

于 2016-03-29T15:43:36.330 回答
0

您使用的是Pipeline Plugin,而不是Job DSL Plugin。在 Pipeline Plugin 中,如果你想定义一些东西,在 Pipeline 语法中还没有可用的函数的地方,你可以自己定义它

于 2016-03-30T13:09:38.473 回答