diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 4072eb6ca2..2cf432343f 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -54,6 +54,7 @@ export class JenkinsApiImpl { private static readonly jobTreeSpec = `actions[*], ${JenkinsApiImpl.lastBuildTreeSpec} jobs{0,1}, + url, name, fullName, displayName, @@ -340,13 +341,33 @@ export class JenkinsApiImpl { return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; } - async getJobBuilds(jenkinsInfo: JenkinsInfo) { - const client = await JenkinsApiImpl.getClient(jenkinsInfo); + async getJobBuilds(jenkinsInfo: JenkinsInfo, jobFullName: string) { + let jobName = jobFullName; - const jobBuilds = await client.job.get({ - name: jenkinsInfo.jobFullName, - tree: JenkinsApiImpl.jobBuildsTreeSpec.replace(/\s/g, ''), - }); + if (jobFullName.includes('/')) { + const arr = jobFullName.split('/'); + const multibranchJobName = arr.shift(); + jobName = [ + multibranchJobName, + 'job', + encodeURIComponent(arr.join('/')), + ].join('/'); + } + + const response = await fetch( + `${ + jenkinsInfo.baseUrl + }/job/${jobName}/api/json?tree=${JenkinsApiImpl.jobBuildsTreeSpec.replace( + /\s/g, + '', + )}`, + { + method: 'get', + headers: jenkinsInfo.headers as HeaderInit, + }, + ); + + const jobBuilds = await response.json(); return jobBuilds; } diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index 88777ff098..06a04d8266 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -169,7 +169,7 @@ export async function createRouter( backstageToken: token, }); - const build = await jenkinsApi.getJobBuilds(jenkinsInfo); + const build = await jenkinsApi.getJobBuilds(jenkinsInfo, jobFullName); response.json({ build: build,