如何将不同节点上的Jenkins阶段同步到单个变更集?
我有一个Jenkins管道,它在不同的奴隶身上运行两个作业,如下所示如何将不同节点上的Jenkins阶段同步到单个变更集?,jenkins,perforce,Jenkins,Perforce,我有一个Jenkins管道,它在不同的奴隶身上运行两个作业,如下所示 node('node-1') { stage ('Checkout') { checkout scm } stage ('Build First Part') { < do some building > } } node('node-2') { stage ('Checkout') { checkout scm }
node('node-1') {
stage ('Checkout') {
checkout scm
}
stage ('Build First Part') {
< do some building >
}
}
node('node-2') {
stage ('Checkout') {
checkout scm
}
stage ('Build Second Part') {
< do some more building >
}
}
node('node-1'){
阶段(“签出”){
校验scm
}
阶段(“构建第一部分”){
}
}
节点('node-2'){
阶段(“签出”){
校验scm
}
阶段(“构建第二部分”){
<多做些建筑>
}
}
节点2上的任务要求首先完成节点1上的任务
我注意到,如果在节点1上的任务运行时发生提交,则节点2上的签出将包含新的提交
我正在使用Perforce进行源代码管理
如何确保两个节点上的签出位于同一变更集中?您可以在主节点(或其他任何位置)上进行签出并将其隐藏。
然后在每个节点上取消搁置它。它实际上比你想象的要快。
例如:
node() {
stage ('Checkout') {
checkout scm
stash name: 'checkout'
}
}
builders['builder1'] = {
node('node-1'){
stage('Build First Part') {
cleanWs()
unstash 'checkout'
< do some building >
}
}
}
builders['builder2'] = {
node('node-2'){
stage('Build Second Part') {
cleanWs()
unstash 'checkout'
< do some more building >
}
}
}
parallel builders
node(){
阶段(“签出”){
校验scm
隐藏名称:“签出”
}
}
建筑商['builder1']={
节点('node-1'){
阶段(“构建第一部分”){
cleanWs()
取消“结帐”
}
}
}
建筑商['builder2']={
节点('node-2'){
阶段(“构建第二部分”){
cleanWs()
取消“结帐”
<多做些建筑>
}
}
}
并行构建器
扩展@pitseekers answer您可以通过
在第一个生成节点上:
- 将变更集保存到文件(p4_changelist.txt)
- 保存保存的文件
- 打开文件
- 从文件中将变更列表值读取到变量
- 使用变更列表值签出存储库。这是perforce populate列表中的pin参数
node('node-1') {
stage ('Checkout') {
checkout scm
}
stage ('Save changelist number') {
writeFile file: 'p4_changelist.txt', text: "${env.P4_CHANGELIST}"
stash includes: 'p4_changelist.txt', name: 'p4_changelist'
}
stage ('Build First Part') {
< do some building >
}
}
node('node-2') {
stage ('Checkout') {
unstash 'p4_changelist'
def changelist = readFile 'p4_changelist.txt'
checkout perforce(
credential: 'credential',
populate: autoClean(
delete: true,
modtime: false,
parallel: [
enable: false,
minbytes: '1024',
minfiles: '1',
threads: '4'
],
// ****** Use the read changelist value here ******
pin: changelist,
quiet: true,
replace: true,
tidy: false
),
workspace: manualSpec(
charset: 'none',
name: 'jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER}',
pinHost: false,
spec: clientSpec(
allwrite: false,
backup: false,
clobber: true,
compress: false,
line: 'LOCAL',
locked: false,
modtime: false,
rmdir: false,
serverID: '',
streamName: '',
type: 'WRITABLE',
view: ''
)
)
)
}
stage ('Build Second Part') {
< do some more building >
}
}
node('node-1'){
阶段(“签出”){
校验scm
}
阶段('保存变更列表编号'){
writeFile文件:“p4_changelist.txt”,文本:“${env.p4_changelist}”
隐藏内容包括:“p4\u changelist.txt”,名称:“p4\u changelist”
}
阶段(“构建第一部分”){
}
}
节点('node-2'){
阶段(“签出”){
取消设置“p4\U变更列表”
def changelist=读取文件“p4_changelist.txt”
检验性能(
凭证:“凭证”,
填充:自动清洁(
删除:对,
莫德泰姆:错,
平行:[
启用:false,
minbytes:'1024',
minfiles:'1',
线程:“4”
],
//******在此处使用读取更改列表值******
pin:changelist,
安静:是的,
替换:正确,
蒂迪:错
),
工作空间:manualSpec(
字符集:“无”,
名称:'jenkins-${NODE\u name}-${JOB\u name}-${EXECUTOR\u NUMBER}',
主持人:错,
规格:clientSpec(
allwrite:错,
备份:false,
是的,
压缩:错,
行:'本地',
锁定:错误,
莫德泰姆:错,
rmdir:错,
服务器ID:“”,
流名称:“”,
类型:“可写”,
视图:“”
)
)
)
}
阶段(“构建第二部分”){
<多做些建筑>
}
}
使用标签。阅读p4 tag
@BryanPendleton如何指定要签出的标记?是否在两个节点上签出相同的源(相同的clientview)?@pitSeek是。