linux 不想让Jenkins奴隶克隆回购?

balp4ylt  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(73)

我的系统设置为Docker Linux PC Master/BeagleBone Linux Slave,通过USB SSH连接。
从本质上讲,我试图做到以下几点:

  • 在master上编译从Bitbucket repo获取的代码。
  • 将编译好的二进制文件传输到BeagleBone(我在Jenkinsfile中使用了'stash'和'unstash'来实现这一点)
  • 使用BeagleBone从设备上的二进制文件刷新连接到它的另一个设备(从设备,而不是主设备)

当我从Jenkins构建时,我的master克隆了repo,构建了代码并隐藏了二进制文件。然而,当我转移到从机上的“flash”阶段时,它也会尝试克隆repo。(由于凭据问题而失败-这是一个单独的问题)。我不希望它这样做-相反,我希望它只是采取新的隐藏文件,并使用它来刷新附加的硬件,而不是去回收站找
我似乎找不到一个选项来防止这种情况发生。我可以做些什么来只使用隐藏的文件?如果使用stash无法做到这一点,可以用另一种方法来完成,而不需要slave尝试克隆repo吗?
这是我的Jenkinsfile:

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 [email protected]:...

//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 [email protected]:...


我不想让它做上面的事情。

rqenqsqc

rqenqsqc1#

显然,同样的问题以不同的形式发布在这里: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作为一个步骤。
下面是新的Jenkinsfile:

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

字符串
(as它发生了,藏起来是不必要的。)

相关问题