package buildjob; import com.atlassian.bamboo.specs.api.BambooSpec; import com.atlassian.bamboo.specs.api.builders.BambooKey; import com.atlassian.bamboo.specs.api.builders.docker.DockerConfiguration; import com.atlassian.bamboo.specs.api.builders.permission.PermissionType; import com.atlassian.bamboo.specs.api.builders.permission.Permissions; import com.atlassian.bamboo.specs.api.builders.permission.PlanPermissions; import com.atlassian.bamboo.specs.api.builders.plan.Job; import com.atlassian.bamboo.specs.api.builders.plan.Plan; import com.atlassian.bamboo.specs.api.builders.plan.PlanIdentifier; import com.atlassian.bamboo.specs.api.builders.plan.Stage; import com.atlassian.bamboo.specs.api.builders.plan.branches.BranchCleanup; import com.atlassian.bamboo.specs.api.builders.plan.branches.PlanBranchManagement; import com.atlassian.bamboo.specs.api.builders.project.Project; import com.atlassian.bamboo.specs.builders.task.CheckoutItem; import com.atlassian.bamboo.specs.builders.task.InjectVariablesTask; import com.atlassian.bamboo.specs.builders.task.ScriptTask; import com.atlassian.bamboo.specs.builders.task.VcsCheckoutTask; import com.atlassian.bamboo.specs.builders.task.CleanWorkingDirectoryTask; import com.atlassian.bamboo.specs.builders.task.VcsTagTask; import com.atlassian.bamboo.specs.builders.trigger.BitbucketServerTrigger; import com.atlassian.bamboo.specs.model.task.InjectVariablesScope; import com.atlassian.bamboo.specs.api.builders.Variable; import com.atlassian.bamboo.specs.util.BambooServer; import com.atlassian.bamboo.specs.builders.task.ScriptTask; import com.atlassian.bamboo.specs.model.task.ScriptTaskProperties.Location; /** * Plan configuration for Bamboo. * Learn more on: https://confluence.atlassian.com/display/BAMBOO/Bamboo+Specs */ @BambooSpec public class PlanSpec { private static final String SERVICE_NAME = "image-prediction"; private static final String SERVICE_NAME_BASE = "image-prediction-base"; private static final String SERVICE_KEY = SERVICE_NAME.toUpperCase().replaceAll("-","").replaceAll("_",""); /** * Run main to publish plan on Bamboo */ public static void main(final String[] args) throws Exception { //By default credentials are read from the '.credentials' file. BambooServer bambooServer = new BambooServer("http://localhost:8085"); Plan plan = new PlanSpec().createDockerBuildPlan(); bambooServer.publish(plan); PlanPermissions planPermission = new PlanSpec().createPlanPermission(plan.getIdentifier()); bambooServer.publish(planPermission); } private PlanPermissions createPlanPermission(PlanIdentifier planIdentifier) { Permissions permission = new Permissions() .userPermissions("atlbamboo", PermissionType.EDIT, PermissionType.VIEW, PermissionType.ADMIN, PermissionType.CLONE, PermissionType.BUILD) .groupPermissions("research", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .groupPermissions("Development", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .groupPermissions("QA", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .loggedInUserPermissions(PermissionType.VIEW) .anonymousUserPermissionView(); return new PlanPermissions(planIdentifier.getProjectKey(), planIdentifier.getPlanKey()).permissions(permission); } private Project project() { return new Project() .name("RED") .key(new BambooKey("RED")); } public Plan createDockerBuildPlan() { return new Plan( project(), SERVICE_NAME, new BambooKey(SERVICE_KEY)) .description("Docker build for image-prediction.") // .variables() .stages(new Stage("Build Stage") .jobs( new Job("Build Job", new BambooKey("BUILD")) .tasks( new CleanWorkingDirectoryTask() .description("Clean working directory.") .enabled(true), new VcsCheckoutTask() .description("Checkout default repository.") .checkoutItems(new CheckoutItem().defaultRepository()), new VcsCheckoutTask() .description("Checkout redai_image research repository.") .checkoutItems(new CheckoutItem().repository("RR / redai_image").path("redai_image")), new ScriptTask() .description("Set config and keys.") .inlineBody("mkdir -p ~/.ssh\n" + "echo \"${bamboo.bamboo_agent_ssh}\" | base64 -d >> ~/.ssh/id_rsa\n" + "echo \"host vector.iqser.com\" > ~/.ssh/config\n" + "echo \" user bamboo-agent\" >> ~/.ssh/config\n" + "chmod 600 ~/.ssh/config ~/.ssh/id_rsa"), new ScriptTask() .description("Build Docker container.") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/docker-build.sh") .argument(SERVICE_NAME + " " + SERVICE_NAME_BASE)) .dockerConfiguration( new DockerConfiguration() .image("nexus.iqser.com:5001/infra/release_build:4.2.0") .volume("/var/run/docker.sock", "/var/run/docker.sock")), new Job("Sonar Job", new BambooKey("SONAR")) .tasks( new CleanWorkingDirectoryTask() .description("Clean working directory.") .enabled(true), new VcsCheckoutTask() .description("Checkout default repository.") .checkoutItems(new CheckoutItem().defaultRepository()), new VcsCheckoutTask() .description("Checkout redai_image repository.") .checkoutItems(new CheckoutItem().repository("RR / redai_image").path("redai_image")), new ScriptTask() .description("Set config and keys.") .inlineBody("mkdir -p ~/.ssh\n" + "echo \"${bamboo.bamboo_agent_ssh}\" | base64 -d >> ~/.ssh/id_rsa\n" + "echo \"host vector.iqser.com\" > ~/.ssh/config\n" + "echo \" user bamboo-agent\" >> ~/.ssh/config\n" + "chmod 600 ~/.ssh/config ~/.ssh/id_rsa"), new ScriptTask() .description("Run Sonarqube scan.") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-scan.sh") .argument(SERVICE_NAME)) .dockerConfiguration( new DockerConfiguration() .image("nexus.iqser.com:5001/infra/release_build:4.2.0") .volume("/var/run/docker.sock", "/var/run/docker.sock"))), new Stage("Licence Stage") .jobs( new Job("Git Tag Job", new BambooKey("GITTAG")) .tasks( new VcsCheckoutTask() .description("Checkout default repository.") .checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask() .description("Build git tag.") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/git-tag.sh"), new InjectVariablesTask() .description("Inject git tag.") .path("git.tag") .namespace("g") .scope(InjectVariablesScope.LOCAL), new VcsTagTask() .description("${bamboo.g.gitTag}") .tagName("${bamboo.g.gitTag}") .defaultRepository()) .dockerConfiguration( new DockerConfiguration() .image("nexus.iqser.com:5001/infra/release_build:4.4.1")), new Job("Licence Job", new BambooKey("LICENCE")) .enabled(false) .tasks( new VcsCheckoutTask() .description("Checkout default repository.") .checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask() .description("Build licence.") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/create-licence.sh")) .dockerConfiguration( new DockerConfiguration() .image("nexus.iqser.com:5001/infra/maven:3.6.2-jdk-13-3.0.0") .volume("/etc/maven/settings.xml", "/usr/share/maven/ref/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock")))) .linkedRepositories("RR / " + SERVICE_NAME) .linkedRepositories("RR / redai_image") .triggers(new BitbucketServerTrigger()) .planBranchManagement(new PlanBranchManagement() .createForVcsBranch() .delete(new BranchCleanup() .whenInactiveInRepositoryAfterDays(14)) .notificationForCommitters()); } }