Jenkins管道:从不同的代理商调查SCM

时间:2018-04-10 21:17:08

标签: git jenkins-pipeline

我正在研究必须在Linux从属代理/节点上运行的Jenkins管道(Windows主机)。我想基于轮询git存储库来解决这个问题,但是由于防火墙配置,存储库只能从从节点看到。

管道使用“agent {node {label'xxx'}}”声明在正确的slave上运行。但是,所有轮询repo的尝试似乎都来自master,就像轮询日志所示。有没有办法从从节点轮询git repo?可以更改防火墙配置,但由于我们的IT安全组织,不是权宜之计。

1 个答案:

答案 0 :(得分:0)

由于没有更好的选择立即出现,这是我的详细解决方法。此“GitPoller”作业配置为每隔10分钟运行一次。它在目标代理(可以看到git SCM服务器)上运行,并执行git checkout并检查新的更改集。如果找到任何更改集,则它将运行实际的构建作业。

pipeline {
    agent {
        node {
            label 'xyzzy' /* run on the firewalled machine */
        }
    }

    /* Declare the pipeline stages */
    stages {
        /* The "ScmFetch" stage fetches the baseline from git */
        stage('ScmFetch') {
            steps {
                echo 'Fetching from SCM...'

                /* Fetch the baseline from git */
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'blah-blah-blah']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'blah-blah-blah', url: 'url-of-git-repo']]])

                script {
                    if (currentBuild.changeSets.size() > 0) {
                        echo 'Found ' + currentBuild.changeSets.size() + ' change sets'
                        build 'real-build-job'
                    }
                    else {
                        echo 'Found no change sets'
                    }
                }                
            }

            post {
                failure {
                    echo 'FAILED in stage ScmFetch'
                }
            }
        }
    }
}