不想让 Jenkins Slave 克隆 repo?
Don't want Jenkins Slave to clone repo?
我的系统设置为 Docker Linux PC Master/BeagleBone Linux Slave,通过 USB SSH 连接。
基本上,我正在尝试执行以下操作:
- 在从 Bitbucket 存储库获取的主机上编译代码。
- 获取编译后的二进制文件并将其传输到 BeagleBone(我在我的 Jenkinsfile 中使用 'stash' 和 'unstash' 来执行此操作)
- 使用 BeagleBone slave 上的二进制文件来刷写连接到它的另一个设备(slave,而不是 master)
当我从 Jenkins 构建时,我的主人会克隆存储库、构建代码并存储二进制文件。但是,当我转移到从服务器上的 '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 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:...
我不希望它执行上述操作。
显然,这里以不同的形式发布了相同的问题:https://devops.stackexchange.com/questions/650/set-a-jenkins-job-to-not-to-clone-the-repo-in-scm/1074
无论如何,方法如下:您需要在第一个代理之后添加一个名为 options { skipDefaultCheckout() }
的选项,这样通常它不会轮询 scm(因为检查命令git 是结帐 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'
}
}
}
}
(碰巧,藏起来是不必要的。)
我的系统设置为 Docker Linux PC Master/BeagleBone Linux Slave,通过 USB SSH 连接。
基本上,我正在尝试执行以下操作:
- 在从 Bitbucket 存储库获取的主机上编译代码。
- 获取编译后的二进制文件并将其传输到 BeagleBone(我在我的 Jenkinsfile 中使用 'stash' 和 'unstash' 来执行此操作)
- 使用 BeagleBone slave 上的二进制文件来刷写连接到它的另一个设备(slave,而不是 master)
当我从 Jenkins 构建时,我的主人会克隆存储库、构建代码并存储二进制文件。但是,当我转移到从服务器上的 '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 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:...
我不希望它执行上述操作。
显然,这里以不同的形式发布了相同的问题:https://devops.stackexchange.com/questions/650/set-a-jenkins-job-to-not-to-clone-the-repo-in-scm/1074
无论如何,方法如下:您需要在第一个代理之后添加一个名为 options { skipDefaultCheckout() }
的选项,这样通常它不会轮询 scm(因为检查命令git 是结帐 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'
}
}
}
}
(碰巧,藏起来是不必要的。)