MintDeploy

MintDeploy is a  framework for defining repeatable enterprise-scale deployments using simple human-readable declarations. MintDeploy extends gradle with enterprise features and provides out-of-the-box plugins for common enterprise requirements that help organisations save on development costs.

MintDeploy is a module in MintPress: an extensible plugin based framework with many plugins for building and deploying to Oracle technology


MintDeploy helps you:

  • Generate and publish versioned artifacts

  • Deploy and undeploy artefacts

  • Customize at deploy time, one artifact deploys to all environments
  • Simple DSL makes deployment and customization a breeze

Wide Product Support

MintDeploy provides a comprehensive set of plugins for Oracle including SOA, OSB, BPM, WebLogic, OAM, OID, DB, WLST


MintDeploy provides a Framework

  • Framework brings standardisation

  • Provides a ‘how’ but doesn’t constrain the ‘what’
  • Defaults are inline with widely accepted best practices
  • MintDeploy is to Gradle as Rails is to Ruby

MintDeploy provides a toolbox of powerful capabilities

  • Standard ways to source properties

  • Encryption support

  • Support for running builds remotely over SSH
  • Deep customization of source and binary files

Example: Remote Deployment

A build requires a script to be run locally on the target host which we connect to via SSH

Typical Approach

  • Write a job in Jenkins which connects to the remote server over ssh and then runs the script.
  • Jenkins is rarely under strict version control.
  • Build becomes a complicated dance of responsibilities between the build scripts and the Jenkins jobs.
  • Build can no longer be run from developer workstation

With MintDeploy

deployment {
  target = 'DefaultServer'
  remoteExecution {
    type = 'ssh'
    sshRemote {
      host = ${target.host}
      user = 'deploy'
    }
  }
}

Example: Sourcing credentials from Vault

For increased security passwords and ssh keys are stored in a secure vault, and need to be accessed during the build

Typical Approach

Write 100s of lines of custom code to authenticate, read, handle errors, etc.

WebTarget target = baseTarget.path(String.format("/v1/%s", path));
        Response response = null;
        try {
            response = target.request()
                    .accept("application/json")
                    .header("X-Vault-Token", this.vaultToken)
                    .get(Response.class);
            if (response.getStatus() == 200) {

                //System.out.println("HTTP-Read:" + response.readEntity(String.class));
                return response.readEntity(VaultResponse.class);
            }
            ErrorResponse error = response.readEntity(ErrorResponse.class);
            throw new VaultException(response.getStatus(), error.getErrors());
        } finally {
            if (response != null) {
                response.close();
            }
        }

With MintDeploy

A simple and human-readable block in the encryption DSL

deployment {
  target = 'DefaultServer'
  encryption {
    type = 'vault'
    authType = 'token'
    url = 'http://vault.my.org/'
  }
}