我有一个应用程序,我需要在Windows和Linux上构建,测试和部署。
我有40个奴隶,其中20个是Linux,20个是分别由“Lin”和“Win”标签定义的Windows。
我首先分配两个节点(Linux和Windows)。问题是我需要通过多个阶段使用它们。但是,我还没有找到一个很好的方法去做这件事。
此代码应该有助于说明我需要做什么:
pipeline {
agent none
stages {
stage('Build') {
parallel (
"Linux Build": {
node('Lin') { // Say this allocates 'Jenkins-node-lin1'
...
}
},
"Windows Build": {
node('Win') { // And this allocates 'Jenkins-node-win1'
...
}
}
)
}
stage('Test') {
steps {
parallel (
"Linux Test": {
node('Lin') { // I need to reuse Jenkins-node-lin1 here
...
}
},
"Windows Test": {
node('Win') { // And Jenkins-node-win1 here as well
...
}
}
)
}
}
stage('Deploy') {
steps {
parallel (
"Linux Deploy": {
node('Lin') { // Same story down here
...
}
},
"Windows Deploy": {
node('Win') { // And this one too
...
}
)
}
}
} // End stages
}
我已经尝试了很多'解决方案',但到目前为止还没有一个解决方案,说实话,我不确定这个功能是否融入了Jenkins。
答案 0 :(得分:1)
我还没试过这个,但我认为你可以做点什么(顺便说一下,你错过了你的步骤{}块):
def linux_node
def windows_node
pipeline {
agent none
stages {
stage('Build') {
steps {
parallel (
"Linux Build": {
node('Lin') { // Say this allocates 'Jenkins-node-lin1'
linux_node = env.NODE_NAME
}
},
"Windows Build": {
node('Win') { // And this allocates 'Jenkins-node-win1'
windows_node = env.NODE_NAME
}
}
)
}
}
stage('Test') {
steps {
parallel (
"Linux Test": {
node(linux_node) { // I need to reuse Jenkins-node-lin1 here
...
}
},
"Windows Test": {
node(windows_node) { // And Jenkins-node-win1 here as well
...
}
}
)
}
}
stage('Deploy') {
steps {
parallel (
"Linux Deploy": {
node(linux_node) { // Same story down here
...
}
},
"Windows Deploy": {
node(windows_node) { // And this one too
...
}
)
}
}
} // End stages
}
我不确定您是否要求与某个节点建立关联,但如果某个文件在工作区中可用,那么这样做会有一点风险。无法保证将使用相同的工作空间。它通常会,但有时工作空间可能会改变。
另一个选项是隐藏您需要在各个阶段之间保留的文件,并在下一阶段解除隐藏它们。那么他们最终会遇到什么代理并不重要。 (除非你有其他一些节点亲和力的原因)。