diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml deleted file mode 100644 index 6cfa7a3..0000000 --- a/bamboo-specs/bamboo.yml +++ /dev/null @@ -1,166 +0,0 @@ ---- -version: 2 - -plan: - project-key: RED - key: PYINFRA - name: pyinfra - description: Build for pyinfra - -stages: -- Sonar Stage: - manual: false - final: false - jobs: - - Sonar Job - -- Git Stage: - manual: false - final: false - jobs: - - Git Tag Job - -- Licence Stage: - manual: false - final: false - jobs: - - Licence Job - -Sonar Job: - key: SONAR - docker: - image: nexus.iqser.com:5001/infra/release_build:4.2.0 - volumes: - ${bamboo.working.directory}: ${bamboo.working.directory} - ${bamboo.tmp.directory}: ${bamboo.tmp.directory} - /var/run/docker.sock: /var/run/docker.sock - docker-run-arguments: [] - tasks: - - clean: - description: Clean working directory. - - checkout: - force-clean-build: 'false' - description: Checkout default repository. - - script: - interpreter: SHELL - scripts: - - |- - mkdir -p ~/.ssh - echo "${bamboo.bamboo_agent_ssh}" | base64 -d >> ~/.ssh/id_rsa - echo "host vector.iqser.com" > ~/.ssh/config - echo " user bamboo-agent" >> ~/.ssh/config - chmod 600 ~/.ssh/config ~/.ssh/id_rsa - - script: - interpreter: SHELL - file: bamboo-specs/scripts/sonar-scan.sh - argument: pyinfra - description: Run Sonarqube scan. - artifact-subscriptions: [] - -Git Tag Job: - key: GITTAG - docker: - image: nexus.iqser.com:5001/infra/release_build:4.4.1 - volumes: - ${bamboo.working.directory}: ${bamboo.working.directory} - ${bamboo.tmp.directory}: ${bamboo.tmp.directory} - docker-run-arguments: [] - tasks: - - checkout: - force-clean-build: 'false' - description: Checkout default repository. - - script: - interpreter: SHELL - file: bamboo-specs/scripts/git-tag.sh - description: Build git tag. - - inject-variables: - file: git.tag - scope: LOCAL - namespace: g - description: Inject git tag. - - any-task: - plugin-key: com.atlassian.bamboo.plugins.vcs:task.vcs.tagging - configuration: - selectedRepository: defaultRepository - tagName: ${bamboo.g.gitTag} - description: ${bamboo.g.gitTag} - artifact-subscriptions: [] - -Licence Job: - key: LICENCE - docker: - image: nexus.iqser.com:5001/infra/maven:3.6.2-jdk-13-3.0.0 - volumes: - ${bamboo.working.directory}: ${bamboo.working.directory} - ${bamboo.tmp.directory}: ${bamboo.tmp.directory} - /etc/maven/settings.xml: /usr/share/maven/ref/settings.xml - /var/run/docker.sock: /var/run/docker.sock - docker-run-arguments: [] - tasks: - - checkout: - force-clean-build: 'false' - description: Checkout default repository. - - script: - interpreter: SHELL - file: bamboo-specs/scripts/create-licence.sh - description: Build licence. - artifact-subscriptions: [] - -repositories: -- RR / pyinfra: - scope: global - -triggers: -- bitbucket-server-trigger - -branches: - create: for-new-branch - delete: - after-deleted-days: never - after-inactive-days: 14 - link-to-jira: true - -notifications: [] - -labels: [] - -dependencies: - require-all-stages-passing: true - enabled-for-branches: true - block-strategy: none - plans: [] - -other: - concurrent-build-plugin: system-default ---- -version: 2 - -plan: - key: RED-PYINFRA - -plan-permissions: -- roles: - - logged-in - - anonymous - permissions: - - view -- users: - - atlbamboo - permissions: - - view - - edit - - build - - clone - - admin - - view-configuration -- groups: - - QA - - research - - Development - permissions: - - view - - edit - - build - - clone - - view-configuration -... diff --git a/bamboo-specs/pom.xml b/bamboo-specs/pom.xml new file mode 100644 index 0000000..886e255 --- /dev/null +++ b/bamboo-specs/pom.xml @@ -0,0 +1,40 @@ + + 4.0.0 + + + com.atlassian.bamboo + bamboo-specs-parent + 7.1.2 + + + + bamboo-specs + 1.0.0-SNAPSHOT + jar + + + true + + + + + com.atlassian.bamboo + bamboo-specs-api + + + com.atlassian.bamboo + bamboo-specs + + + + + junit + junit + test + + + + + + diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java new file mode 100644 index 0000000..4499c4b --- /dev/null +++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java @@ -0,0 +1,163 @@ +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.util.BambooServer; +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 = "pyinfra"; + + 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().createBuildPlan(); + 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 createBuildPlan() { + return new Plan( + project(), + SERVICE_NAME, new BambooKey(SERVICE_KEY)) + .description("Build for pyinfra") + .stages( + new Stage("Sonar Stage") + .jobs( + 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 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("Git 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 Stage("Licence Stage") + .jobs( + 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) + .triggers(new BitbucketServerTrigger()) + .planBranchManagement( + new PlanBranchManagement() + .createForVcsBranch() + .delete(new BranchCleanup() + .whenInactiveInRepositoryAfterDays(14)) + .notificationForCommitters()); + } +} diff --git a/bamboo-specs/scripts/config-keys.sh b/bamboo-specs/src/main/resources/scripts/config-keys.sh similarity index 100% rename from bamboo-specs/scripts/config-keys.sh rename to bamboo-specs/src/main/resources/scripts/config-keys.sh diff --git a/bamboo-specs/scripts/create-licence.sh b/bamboo-specs/src/main/resources/scripts/create-licence.sh similarity index 100% rename from bamboo-specs/scripts/create-licence.sh rename to bamboo-specs/src/main/resources/scripts/create-licence.sh diff --git a/bamboo-specs/scripts/git-tag.sh b/bamboo-specs/src/main/resources/scripts/git-tag.sh similarity index 100% rename from bamboo-specs/scripts/git-tag.sh rename to bamboo-specs/src/main/resources/scripts/git-tag.sh diff --git a/bamboo-specs/scripts/sonar-scan.sh b/bamboo-specs/src/main/resources/scripts/sonar-scan.sh similarity index 100% rename from bamboo-specs/scripts/sonar-scan.sh rename to bamboo-specs/src/main/resources/scripts/sonar-scan.sh diff --git a/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java new file mode 100644 index 0000000..7416b28 --- /dev/null +++ b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java @@ -0,0 +1,16 @@ +package buildjob; + + +import com.atlassian.bamboo.specs.api.builders.plan.Plan; +import com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException; +import com.atlassian.bamboo.specs.api.util.EntityPropertiesBuilders; +import org.junit.Test; + +public class PlanSpecTest { + @Test + public void checkYourPlanOffline() throws PropertiesValidationException { + Plan plan = new PlanSpec().createDockerBuildPlan(); + + EntityPropertiesBuilders.build(plan); + } +}