不希望詹金斯奴隶克隆回购?

时间:2018-01-11 23:57:41

标签: linux jenkins bitbucket beagleboneblack jenkins-slave

我的系统设置为Docker Linux PC Master / BeagleBone Linux Slave,通过USB SSH连接。

基本上,我正在尝试执行以下操作:

  • 编译从Bitbucket仓库获取的主服务器上的代码。
  • 获取已编译的二进制文件并将其传输到BeagleBone(我在Jenkins文件中使用'stash'和'unstash'来执行此操作)
  • 使用BeagleBone从站上的二进制文件来闪存连接到它的另一台设备(从站,而不是主站)

当我从Jenkins构建时,我的主人克隆了repo,构建代码并存储二进制文件。但是,当我转移到从属设备上的“闪存”阶段时,尝试克隆存储库(由于凭证问题而失败 - 这是一个单独的问题)。我不希望它这样做 - 相反,我希望它只是采用新存储的文件并使用它来刷新附加的硬件,而不是在它上面查看它。

我似乎无法找到防止这种情况发生的选项。如何使用隐藏文件我该怎么办?如果使用stash是不可能的,那么在没有奴隶试图克隆回购的情况下可以用另一种方式吗?

这是我的Jenkins文件:

pipeline { 
    agent none
    stages {
        stage('Build') {
            agent {
                label 'master'
            }
            steps {
                sh 'cd application/.../example && make'
                stash includes: 'application/.../example/example.bin', name: 'Flash'
            }
        }

        stage('Test of Flash') {
            agent {
                 label 'test_slave'
            }
            steps {
              unstash 'Flash'
              //Flashing step here
              sh 'make check || true'
            }
        }
    }
}

这是控制台日志,从主编译开始:

obtained Jenkinsfile from 913...
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] node
Running on Jenkins in /var/jenkins_home/...
[Pipeline] {
[Pipeline] checkout
Cloning the remote Git repository
Cloning with configured refspecs honoured and without tags
Cloning repository git@bitbucket.org:...

//Later, the file compiles:
Generating binary and Printing size information:...
//Compiles, then:
[Pipeline] stash
Stashed 1 file(s)
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test of Flash)
[Pipeline] node
Running on test_slave in /home/debian/...
[Pipeline] {
[Pipeline] checkout  //And it starts to clone the repo here!
Cloning the remote Git repository
Cloning with configured refspecs honoured and without tags
Cloning repository git@bitbucket.org:...

我不希望它执行上述操作。

1 个答案:

答案 0 :(得分:2)

显然,同样的问题在这里以不同的形式发布:https://devops.stackexchange.com/questions/650/set-a-jenkins-job-to-not-to-clone-the-repo-in-scm/1074

无论如何,这里有如何做到这一点:你需要在第一个代理之后添加一个名为options { skipDefaultCheckout() }的选项,这样一般来说,它不会轮询scm(因为命令检查git是checkout scm。)

然后,在您想要检查git的阶段中,键入checkout scm作为步骤。

这是新的Jenkins文件:

pipeline { 
    agent none
    options { skipDefaultCheckout() }  //THIS ONE
    stages {
        stage('Build') {
            agent {
                label 'master'
            }
            steps {
                checkout scm  //AND THIS ONE
                sh 'cd application/...
            }
        }
        stage('Test of Flash') {
            agent {
                label 'test_slave'
            }
            steps {
              sh 'cd application/...
              sh 'make check || true'
            }
        }
    }
}

(事情发生时,藏匿是不必要的。)