Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jenkins管道将多个git回购签出到同一作业中_Git_Jenkins_Jenkins Pipeline - Fatal编程技术网

使用Jenkins管道将多个git回购签出到同一作业中

使用Jenkins管道将多个git回购签出到同一作业中,git,jenkins,jenkins-pipeline,Git,Jenkins,Jenkins Pipeline,在我的Jenkins工作中,我使用Jenkins Multiple SCM插件将三个git存储库签出到三个子目录中。然后,我执行一组命令,用从所有三个存储库中提取的信息和代码构建一组工件 多个SCM现在已折旧,文本建议移动到管道。我试过了,但我不知道怎么做 以下是我感兴趣的Jenkins工作目录顶层的目录结构: $ ls Combination CombinationBuilder CombinationResults 这三个子目录中的每一个子目录都签出了一个git repo。对于多个SCM,

在我的Jenkins工作中,我使用Jenkins Multiple SCM插件将三个git存储库签出到三个子目录中。然后,我执行一组命令,用从所有三个存储库中提取的信息和代码构建一组工件

多个SCM现在已折旧,文本建议移动到管道。我试过了,但我不知道怎么做

以下是我感兴趣的Jenkins工作目录顶层的目录结构:

$ ls
Combination
CombinationBuilder
CombinationResults
这三个子目录中的每一个子目录都签出了一个git repo。对于多个SCM,我使用git,然后添加了“签出到子目录”行为。以下是我使用管道脚本的尝试:

node('ATLAS && Linux') {
    sh('[ -e CalibrationResults ] || mkdir CalibrationResults')
    sh('cd CalibrationResults')
    git url: 'https://github.com/AtlasBID/CalibrationResults.git'
    sh('cd ..')
    sh('[ -e Combination ] || mkdir Combination')
    sh('cd Combination')
    git url: 'https://github.com/AtlasBID/Combination.git'
    sh('cd ..')
    sh('[ -e CombinationBuilder ] || mkdir CombinationBuilder')
    sh('cd CombinationBuilder')
    git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
    sh 'cd ..'

    sh('ls')
    sh('. CombinationBuilder/build.sh')
}

但是,git命令似乎是在工作区的顶级目录中执行的(这有一定意义),而且根据语法,似乎也没有签出到子目录的行为。

您可以使用
dir
命令在子目录中执行管道步骤:

$ ls
Combination
CombinationBuilder
CombinationResults
node('ATLAS&&Linux')){
目录(“校准结果”){
git url:'https://github.com/AtlasBID/CalibrationResults.git'
}
目录(‘组合’){
git url:'https://github.com/AtlasBID/Combination.git'
}
目录('CombinationBuilder'){
git url:'https://github.com/AtlasBID/CombinationBuilder.git'
}
sh('ls'))
sh('.CombinationBuilder/build.sh')
}

如果您的存储库有子模块,请使用git checkout

pipeline {
agent {label 'master'}
stages{
    stage("Demo"){
        steps{

            echo 'Hello World'
        }
    }
    stage("Source"){
        parallel{
            stage('CalibrationResults'){
                steps{
                    echo 'Checking out CalibrationResults'
                    checkout([$class: 'GitSCM', branches: [[name: '*/CI-CD-Demo']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: false, timeout: 60], [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', timeout: 60, trackingSubmodules: true], [$class: 'RelativeTargetDirectory', relativeTargetDir: 'server-core'],[$class: 'CheckoutOption', timeout: 60]], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/AtlasBID/CalibrationResults.git']]])
                }
            }
            stage('Combination'){

                steps{
                    echo 'Checking out server spoke'
                    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: false, timeout: 60], [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', timeout: 60, trackingSubmodules: true], [$class: 'RelativeTargetDirectory', relativeTargetDir: 'server-spoke'], [$class: 'CheckoutOption', timeout: 60]], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/AtlasBID/CombinationBuilder.git']]])


                }
            }
        }

    }

}
}

使用Checkout git snippet generator生成

您可以使用Checkout SCM步骤三次将这三个git存储库签出到三个子目录中,如下所示:

stage('Checkout') {
 // Get CalibrationResults from GitHub
 checkout([  
            $class: 'GitSCM', 
            branches: [[name: 'refs/heads/master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'CalibrationResults']], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/CalibrationResults.git']]
        ])
 // Get Combination from GitHub
 checkout([  
            $class: 'GitSCM', 
            branches: [[name: 'refs/heads/master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'Combination']], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/Combination.git']]
        ])
 // Get CombinationBuilder from GitHub
 checkout([  
            $class: 'GitSCM', 
            branches: [[name: 'refs/heads/master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'CombinationBuilder']], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/CombinationBuilder.git']]
        ])

}
这是我的

    stage('CheckoutModule1') {
        steps {
            sh 'mkdir -p Module1'
            dir("Module1")
            {
                git branch: "develop",
                credentialsId: 'aaa',
                url: 'git@a.com:b/module1.git'
            }
        }
    }

    stage('CheckoutModule2') {
        steps {
            sh 'mkdir -p Module2'
            dir("Module2")
            {
                git branch: "develop",
                credentialsId: 'aaa',
                url: 'git@a.com:b/module2.git'
            }
        }
    }

太好了,这就成功了,谢谢!我正在慢慢学习管道。我希望所有的软件都能选择一个DSL来执行工作流。我已经学了很多了。:-)如何返回$WORKSPACE目录/管道目录?我必须返回到全局上下文来执行一些脚本。dir切换上下文并将其保留在那里。最后一个“ls”命令将打印CombinationBuilder repo的内容。如何为repo使用不同的凭据?比如说我的“主”repo(Jenkins正在监控以触发作业)存在于Bitbucket中,我想在构建中克隆一个现有的Github repo,我如何为Bitbucket指定一组凭据&为Github指定另一组凭据?要使用不同的凭据,请在git命令上使用可选参数“credentialsId”。e、 g.
git url:'https://github.com/AtlasBID/CombinationBuilder.git“,credentialsId:'foo'
其中'foo'是Jenkins的凭证id。@haridsv,
git
的文档在这里:对我来说,这是一个完美的解决方案,因为我有复杂的选项。非常感谢@我想给我一个符咒!谢谢。非常有用的响应这似乎要求Jenkins让这变得如此困难,与TeamCity相比,这就像锤子和凿子一样,使这一功能如此优雅。知道如何在给定分支机构检出子模块吗?