Skip to content

Commit

Permalink
Update Igor endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
AMeng committed Dec 17, 2015
1 parent 91afde8 commit f0c1c48
Show file tree
Hide file tree
Showing 16 changed files with 241 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@ class CreateBakeTaskSpec extends Specification {
]
]

@Shared
def buildInfoWithFoldersUrl = [
url: "http://spinnaker.builds.test.netflix.net/job/folder/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm']
]
]

@Shared
def buildInfoWithUrlAndSCM = [
url: "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/",
Expand Down Expand Up @@ -354,18 +363,18 @@ class CreateBakeTaskSpec extends Specification {
def result = task.execute(stage)
then:
result.outputs.with {
bakePackageName == "hodor_1.1_all"
buildHost == "http://spinnaker.builds.test.netflix.net/"
job == "SPINNAKER-package-echo"
buildNumber == "69"
!commitHash
}
result.outputs.bakePackageName == "hodor_1.1_all"
result.outputs.buildHost == "http://spinnaker.builds.test.netflix.net/"
result.outputs.job == jobName
result.outputs.buildNumber == "69"
!result.outputs.commitHash

where:
triggerInfo | contextInfo
buildInfoWithUrl | null
null | buildInfoWithUrl
triggerInfo | contextInfo | jobName
buildInfoWithUrl | null | "SPINNAKER-package-echo"
null | buildInfoWithUrl | "SPINNAKER-package-echo"
buildInfoWithFoldersUrl | null | "folder/job/SPINNAKER-package-echo"
null | buildInfoWithFoldersUrl | "folder/job/SPINNAKER-package-echo"
}

@Unroll
Expand All @@ -384,13 +393,11 @@ class CreateBakeTaskSpec extends Specification {
def result = task.execute(stage)

then:
result.outputs.with {
bakePackageName == "hodor_1.1_all"
buildHost == "http://spinnaker.builds.test.netflix.net/"
job == "SPINNAKER-package-echo"
buildNumber == "69"
commitHash == "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"
}
result.outputs.bakePackageName == "hodor_1.1_all"
result.outputs.buildHost == "http://spinnaker.builds.test.netflix.net/"
result.outputs.job == "SPINNAKER-package-echo"
result.outputs.buildNumber == "69"
result.outputs.commitHash == "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"

where:
triggerInfo | contextInfo
Expand All @@ -414,13 +421,11 @@ class CreateBakeTaskSpec extends Specification {
def result = task.execute(stage)

then:
result.outputs.with {
bakePackageName == "hodor_1.1_all"
buildHost == "http://spinnaker.builds.test.netflix.net/"
job == "SPINNAKER-package-echo"
buildNumber == "69"
commitHash == "1234567f8d02a40fa84ec9d4d0dccd263d51782d"
}
result.outputs.bakePackageName == "hodor_1.1_all"
result.outputs.buildHost == "http://spinnaker.builds.test.netflix.net/"
result.outputs.job == "SPINNAKER-package-echo"
result.outputs.buildNumber == "69"
result.outputs.commitHash == "1234567f8d02a40fa84ec9d4d0dccd263d51782d"

where:
triggerInfo | contextInfo
Expand All @@ -444,13 +449,11 @@ class CreateBakeTaskSpec extends Specification {
def result = task.execute(stage)

then:
result.outputs.with {
bakePackageName == "hodor_1.1_all"
buildHost == "http://spinnaker.builds.test.netflix.net/"
job == "SPINNAKER-package-echo"
buildNumber == "69"
commitHash == "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"
}
result.outputs.bakePackageName == "hodor_1.1_all"
result.outputs.buildHost == "http://spinnaker.builds.test.netflix.net/"
result.outputs.job == "SPINNAKER-package-echo"
result.outputs.buildNumber == "69"
result.outputs.commitHash == "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"

where:
triggerInfo | contextInfo
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,15 +179,14 @@ class PackageInfo {
@CompileDynamic
// Naming-convention for buildInfo.url is $protocol://$buildHost/job/$job/$buildNumber/.
// For example: http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/
// Note that job names can contain slashes if using the Folders plugin.
// For example: http://spinnaker.builds.test.netflix.net/job/folder1/job/job1/69/
def parseBuildInfoUrl(String url) {
List<String> urlParts = url?.tokenize("/")

if (urlParts?.size == 5) {
if (urlParts?.size >= 5) {
def buildNumber = urlParts.pop()
def job = urlParts.pop()

// Discard 'job' path segment.
urlParts.pop()
def job = urlParts[3..-1].join('/')

def buildHost = "${urlParts[0]}//${urlParts[1]}/"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import spock.lang.Unroll
class PackageInfoSpec extends Specification {

@Subject
PackageInfo info = new PackageInfo(Mock(Stage), 'deb', '_', false, true, Mock(ObjectMapper))
PackageInfo info = new PackageInfo(Mock(Stage), 'deb', '_', true, true, Mock(ObjectMapper))

Map buildInfo = [
artifacts: [
Expand Down Expand Up @@ -73,4 +73,15 @@ class PackageInfoSpec extends Specification {
info.createAugmentedRequest(trigger, buildInfo, request).package == 'dos_1.0-h2'
}

void "should parse the build info url into expected parts"() {
expect:
info.parseBuildInfoUrl(pattern) == expectedResult

where:
pattern || expectedResult
"http://jenkins.com/job/jobName/123" || ["http://jenkins.com/", "jobName", "123"]
"http://jenkins.com/job/folder/job/jobName/123" || ["http://jenkins.com/", "folder/job/jobName", "123"]
"http://jenkins.com/job/folder/job/job name/123" || ["http://jenkins.com/", "folder/job/job name", "123"]
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2015 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


package com.netflix.spinnaker.orca.igor

import groovy.transform.CompileStatic
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.web.util.UriUtils

@CompileStatic
@Component
class BuildService {

@Autowired
IgorService igorService

private String encode(uri) {
return UriUtils.encodeFragment(uri.toString(), "UTF-8")
}

String build(String master, String jobName, Map<String, String> queryParams) {
return igorService.build(master, encode(jobName), queryParams)
}

Map queuedBuild(String master, String item) {
return igorService.queuedBuild(master, item)
}

Map<String, Object> getBuild(Integer buildNumber, String master, String job) {
return igorService.getBuild(buildNumber, master, encode(job))
}

Map<String, Object> getPropertyFile(Integer buildNumber, String fileName, String master, String job) {
return igorService.getPropertyFile(buildNumber, fileName, master, encode(job))
}

List compareCommits(String repoType, String projectKey, String repositorySlug, Map<String, String> requestParams) {
return igorService.compareCommits(repoType, projectKey, repositorySlug, requestParams)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.netflix.spinnaker.orca.igor

import retrofit.http.EncodedPath
import retrofit.http.GET
import retrofit.http.PUT
import retrofit.http.Path
Expand All @@ -24,21 +25,21 @@ import retrofit.http.QueryMap
interface IgorService {

@PUT("/masters/{name}/jobs/{jobName}")
String build(@Path("name") String master, @Path("jobName") String jobName, @QueryMap Map<String,String> queryParams)
String build(@Path("name") String master, @EncodedPath("jobName") String jobName, @QueryMap Map<String,String> queryParams)

@GET("/jobs/{master}/queue/{item}")
@GET("/builds/queue/{master}/{item}")
Map queuedBuild(@Path("master") String master, @Path("item") String item)

@GET("/jobs/{master}/{job}/{buildNumber}")
Map<String, Object> getBuild(@Path("master") String master,
@Path("job") String job,
@Path("buildNumber") Integer buildNumber)
@GET("/builds/status/{buildNumber}/{master}/{job}")
Map<String, Object> getBuild(@Path("buildNumber") Integer buildNumber,
@Path("master") String master,
@EncodedPath("job") String job)

@GET("/jobs/{master}/{job}/{buildNumber}/properties/{fileName}")
Map<String, Object> getPropertyFile(@Path("master") String master,
@Path("job") String job,
@Path("buildNumber") Integer buildNumber,
@Path("fileName") String fileName)
@GET("/builds/properties/{buildNumber}/{fileName}/{master}/{job}")
Map<String, Object> getPropertyFile(@Path("buildNumber") Integer buildNumber,
@Path("fileName") String fileName,
@Path("master") String master,
@EncodedPath("job") String job)

@GET("/{repoType}/{projectKey}/{repositorySlug}/compareCommits")
List compareCommits(@Path("repoType") String repoType, @Path("projectKey") String projectKey, @Path("repositorySlug") String repositorySlug, @QueryMap Map<String, String> requestParams)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import com.netflix.spinnaker.orca.ExecutionStatus
import com.netflix.spinnaker.orca.TaskResult
import com.netflix.spinnaker.orca.front50.Front50Service
import com.netflix.spinnaker.orca.front50.model.Application
import com.netflix.spinnaker.orca.igor.IgorService
import com.netflix.spinnaker.orca.igor.BuildService
import com.netflix.spinnaker.orca.kato.tasks.DiffTask
import com.netflix.spinnaker.orca.clouddriver.OortService
import com.netflix.spinnaker.orca.pipeline.model.Stage
Expand All @@ -48,7 +48,7 @@ class GetCommitsTask implements DiffTask {
ObjectMapper objectMapper

@Autowired(required = false)
IgorService igorService
BuildService buildService

@Autowired
Front50Service front50Service
Expand All @@ -57,8 +57,8 @@ class GetCommitsTask implements DiffTask {
TaskResult execute(Stage stage) {
def retriesRemaining = stage.context.getCommitsRetriesRemaining != null ? stage.context.getCommitsRetriesRemaining : MAX_RETRIES
// is igor not configured or have we exceeded configured retries
if (!igorService || retriesRemaining == 0) {
log.info("igor is not configured or retries exceeded : igorService : ${igorService}, retries : ${retriesRemaining}")
if (!buildService || retriesRemaining == 0) {
log.info("igor is not configured or retries exceeded : buildService : ${buildService}, retries : ${retriesRemaining}")
return new DefaultTaskResult(ExecutionStatus.SUCCEEDED, [commits: [], getCommitsRetriesRemaining: retriesRemaining])
}

Expand Down Expand Up @@ -122,7 +122,7 @@ class GetCommitsTask implements DiffTask {

List getCommitsList(String repoType, String projectKey, String repositorySlug, String sourceCommit, String targetCommit) {
List commitsList = []
List commits = igorService.compareCommits(repoType, projectKey, repositorySlug, [to: sourceCommit, from: targetCommit, limit: 100])
List commits = buildService.compareCommits(repoType, projectKey, repositorySlug, [to: sourceCommit, from: targetCommit, limit: 100])
commits.each {
// add commits to the task output
commitsList << [displayId: it.displayId, id: it.id, authorDisplayName: it.authorDisplayName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import com.netflix.spinnaker.orca.DefaultTaskResult
import com.netflix.spinnaker.orca.ExecutionStatus
import com.netflix.spinnaker.orca.RetryableTask
import com.netflix.spinnaker.orca.TaskResult
import com.netflix.spinnaker.orca.igor.IgorService
import com.netflix.spinnaker.orca.igor.BuildService
import com.netflix.spinnaker.orca.pipeline.model.Stage
import groovy.util.logging.Slf4j
import org.springframework.beans.factory.annotation.Autowired
Expand All @@ -37,7 +37,7 @@ class MonitorJenkinsJobTask implements RetryableTask {
long timeout = TimeUnit.HOURS.toMillis(2)

@Autowired
IgorService igorService
BuildService buildService

private static Map<String, ExecutionStatus> statusMap = [
'ABORTED' : ExecutionStatus.CANCELED,
Expand All @@ -52,15 +52,15 @@ class MonitorJenkinsJobTask implements RetryableTask {
String job = stage.context.job
def buildNumber = (int) stage.context.buildNumber
try {
Map<String, Object> build = igorService.getBuild(master, job, buildNumber)
Map<String, Object> build = buildService.getBuild(buildNumber, master, job)
String result = build.result
if ((build.building && build.building != 'false') || (build.running && build.running != 'false')) {
return new DefaultTaskResult(ExecutionStatus.RUNNING, [buildInfo: build])
}
if (statusMap.containsKey(result)) {
Map<String, Object> properties = [:]
if (stage.context.propertyFile) {
properties = igorService.getPropertyFile(master, job, buildNumber, stage.context.propertyFile)
properties = buildService.getPropertyFile(buildNumber, stage.context.propertyFile, master, job)
}
return new DefaultTaskResult(statusMap[result], [buildInfo: build] + properties, [buildInfo: build] + properties)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import com.netflix.spinnaker.orca.DefaultTaskResult
import com.netflix.spinnaker.orca.ExecutionStatus
import com.netflix.spinnaker.orca.RetryableTask
import com.netflix.spinnaker.orca.TaskResult
import com.netflix.spinnaker.orca.igor.IgorService
import com.netflix.spinnaker.orca.igor.BuildService
import com.netflix.spinnaker.orca.pipeline.model.Stage
import groovy.util.logging.Slf4j
import org.springframework.beans.factory.annotation.Autowired
Expand All @@ -37,7 +37,7 @@ class MonitorQueuedJenkinsJobTask implements RetryableTask {
long timeout = TimeUnit.HOURS.toMillis(2)

@Autowired
IgorService igorService
BuildService buildService

@Override
TaskResult execute(Stage stage) {
Expand All @@ -46,7 +46,7 @@ class MonitorQueuedJenkinsJobTask implements RetryableTask {
String queuedBuild = stage.context.queuedBuild

try {
Map<String, Object> build = igorService.queuedBuild(master, queuedBuild)
Map<String, Object> build = buildService.queuedBuild(master, queuedBuild)
if (build?.number == null) {
return new DefaultTaskResult(ExecutionStatus.RUNNING)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import com.netflix.spinnaker.orca.DefaultTaskResult
import com.netflix.spinnaker.orca.ExecutionStatus
import com.netflix.spinnaker.orca.Task
import com.netflix.spinnaker.orca.TaskResult
import com.netflix.spinnaker.orca.igor.IgorService
import com.netflix.spinnaker.orca.igor.BuildService
import com.netflix.spinnaker.orca.pipeline.model.Stage
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
Expand All @@ -30,7 +30,7 @@ import org.springframework.stereotype.Component
class StartJenkinsJobTask implements Task {

@Autowired
IgorService igorService
BuildService buildService

@Autowired
ObjectMapper objectMapper
Expand All @@ -39,7 +39,7 @@ class StartJenkinsJobTask implements Task {
TaskResult execute(Stage stage) {
String master = stage.context.master
String job = stage.context.job
String queuedBuild = igorService.build(master, job, stage.context.parameters)
String queuedBuild = buildService.build(master, job, stage.context.parameters)
new DefaultTaskResult(ExecutionStatus.SUCCEEDED, [queuedBuild: queuedBuild] )
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import com.netflix.spinnaker.orca.DefaultTaskResult
import com.netflix.spinnaker.orca.ExecutionStatus
import com.netflix.spinnaker.orca.Task
import com.netflix.spinnaker.orca.TaskResult
import com.netflix.spinnaker.orca.igor.IgorService
import com.netflix.spinnaker.orca.igor.BuildService
import com.netflix.spinnaker.orca.pipeline.model.Pipeline
import com.netflix.spinnaker.orca.pipeline.model.Stage
import org.springframework.beans.factory.annotation.Autowired
Expand All @@ -32,7 +32,7 @@ import org.springframework.stereotype.Component
class StartScriptTask implements Task {

@Autowired
IgorService igorService
BuildService buildService

@Autowired
ObjectMapper objectMapper
Expand Down Expand Up @@ -71,7 +71,7 @@ class StartScriptTask implements Task {
CMC : cmc
]

String queuedBuild = igorService.build(master, job, parameters)
String queuedBuild = buildService.build(master, job, parameters)
new DefaultTaskResult(ExecutionStatus.SUCCEEDED, [master: master, job: job, queuedBuild: queuedBuild])
}

Expand Down
Loading

0 comments on commit f0c1c48

Please sign in to comment.