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.plan.configuration.ConcurrentBuilds; import com.atlassian.bamboo.specs.api.builders.project.Project; import com.atlassian.bamboo.specs.builders.task.*; import com.atlassian.bamboo.specs.builders.trigger.BitbucketServerTrigger; import com.atlassian.bamboo.specs.model.task.InjectVariablesScope; import com.atlassian.bamboo.specs.model.task.ScriptTaskProperties.Location; import com.atlassian.bamboo.specs.util.BambooServer; import static com.atlassian.bamboo.specs.builders.task.TestParserTask.createJUnitParserTask; /** * 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 = "persistence-service"; private static final String SERVICE_KEY = SERVICE_NAME.toUpperCase().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().createPlan(); 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("development", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .groupPermissions("devplant", 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 createPlan() { return new Plan( project(), SERVICE_NAME, new BambooKey(SERVICE_KEY)) .description("Plan created from (enter repository url of your plan)") .stages(new Stage("Default Stage") .jobs(new Job("Default Job", new BambooKey("JOB1")) .tasks( new ScriptTask() .description("Clean") .inlineBody("#!/bin/bash\n" + "set -e\n" + "rm -rf ./*"), new VcsCheckoutTask() .description("Checkout Default Repository") .checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask() .description("Build") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/build-java.sh") .argument(SERVICE_NAME), createJUnitParserTask() .description("Resultparser") .resultDirectories("**/test-reports/*.xml, **/target/surefire-reports/*.xml, **/target/failsafe-reports/*.xml") .enabled(true), new ScriptTask() .description("Sonar") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-java.sh") .argument(SERVICE_NAME), 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/maven:3.6.2-jdk-13-3.0.0") .dockerRunArguments("--net=host") .volume("/etc/maven/settings.xml", "/usr/share/maven/ref/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock") ) ) ) .linkedRepositories("RED / " + SERVICE_NAME) .triggers(new BitbucketServerTrigger()) .planBranchManagement(new PlanBranchManagement() .createForVcsBranch() .delete(new BranchCleanup() .whenInactiveInRepositoryAfterDays(14)) .notificationForCommitters()); } }