{"id":22281751,"url":"https://github.com/jenkinsci/digitalocean-plugin","last_synced_at":"2026-02-15T21:18:15.120Z","repository":{"id":16405379,"uuid":"19156356","full_name":"jenkinsci/digitalocean-plugin","owner":"jenkinsci","description":"Jenkins DigitalOcean Agent Plugin","archived":false,"fork":false,"pushed_at":"2024-08-09T09:13:49.000Z","size":256,"stargazers_count":44,"open_issues_count":9,"forks_count":39,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-03-29T09:41:33.680Z","etag":null,"topics":["adopt-this-plugin","crazy-topic","digitalocean","jenkins","jenkins-agent","jenkins-cloud"],"latest_commit_sha":null,"homepage":"https://plugins.jenkins.io/digitalocean-plugin/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"pulse00/digitalocean-plugin","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jenkinsci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-04-25T18:33:27.000Z","updated_at":"2025-03-20T10:44:54.000Z","dependencies_parsed_at":"2024-12-03T16:33:22.377Z","dependency_job_id":null,"html_url":"https://github.com/jenkinsci/digitalocean-plugin","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkinsci%2Fdigitalocean-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkinsci%2Fdigitalocean-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkinsci%2Fdigitalocean-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenkinsci%2Fdigitalocean-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jenkinsci","download_url":"https://codeload.github.com/jenkinsci/digitalocean-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249730649,"owners_count":21317328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adopt-this-plugin","crazy-topic","digitalocean","jenkins","jenkins-agent","jenkins-cloud"],"created_at":"2024-12-03T16:21:36.921Z","updated_at":"2026-02-15T21:18:10.098Z","avatar_url":"https://github.com/jenkinsci.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jenkins Digital Ocean Plugin\n\nAllow Jenkins to start agents on [DigitalOcean](https://digitalocean.com/) droplets on demand and destroy them as they get unused.\n\nOur friends at [Digital Ocean](https://digitalocean.com/) have provided an awesome promo code if you are new to Digital Ocean. After signing up for DigitalOcean, use `DOJENKINS100` to get $100 credit to use over your first 60 days. Offer only valid for new accounts.\n\n## Known Issues\n\nAs of 2021-03-05 - If your using Freestyle Jobs and using something older than 2.277.2 (LTS) or 2.285 (Weekly) you will likely have your build crash the first time it connects to a given droplet. Its\nbeen fixed in newer version.\n\n## Configure plugin via Groovy script\n\nEither automatically upon [Jenkins post-initialization](https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/) or\nthrough [Jenkins script console](https://www.jenkins.io/doc/book/managing/script-console/), example:\n\n```groovy\nimport com.dubture.jenkins.digitalocean.DigitalOceanCloud\nimport com.dubture.jenkins.digitalocean.SlaveTemplate\nimport jenkins.model.Jenkins\n\n// parameters\ndef agentTemplateParameters = [\n  idleTerminationInMinutes: '10',\n  imageId:                  'ubuntu-17-10-x64',\n  initScript:               '',\n  installMonitoring:        false,\n  instanceCap:              '2',\n  labellessJobsAllowed:     false,\n  labelString:              'digitalocean.toronto.ubuntu.17.10',\n  name:                     'digitalocean.toronto.ubuntu.17.10',\n  numExecutors:             '1',\n  regionId:                 'tor1',\n  sizeId:                   '512mb',\n  sshPort:                  22,\n  tags:                     '',\n  userData:                 '',\n  username:                 'root',\n  workspacePath:            '/home/jenkins'\n]\n\ndef cloudParameters = [\n  authToken:            '01234567890123456789012345678901234567890123456789',\n  connectionRetryWait:  '30',\n  instanceCap:          '2',\n  name:                 'mycompany',\n  sshKeyId:             '01234567',\n  timeoutMinutes:       '10',\n  usePrivateNetworking: false,\n  privateKey:     '''-----BEGIN RSA PRIVATE KEY-----\nMIICWwIBAAKBgGuoiHtwl8T2cKfclsWLOcv8S6p74iOAQX1kwCLvLy7ioDFlNzsI\nU235N1StnZYZIwGla+3Uo3jMSUuWkMH85+d3KoRFPS+6RJCiAvMI0hr8FByes22v\nDAVDnhkZ2SFOeh1SPxWDygPo2fW5sgqL2eYLO1CplDdqYhHLAL1FDV5tAgMBAAEC\ngYBWRZoJgXK9zdb9TZIs/6LzSlzAY8IWPOM+PwyRcibXZZiFvNyDm+pviHTEkNRl\nwgMBgLR6xBmz5dEel6utKKQVEPtD1m6N+z6hwUw+Nis35DCvmBX+hQSK+atGgjYH\nZKz0oqWUSuzHG+CxxcrePDTYJ4fdSyLPsQqaWoCZseDDwQJBANLey9r+juBEQe2N\nMJoZTU1q/AoS5kY7OWQ1aF495I9fz87u9vx8BJh8djvmABwidUWREnd4vwwEIS3M\nJtFGn+kCQQCCsvBvOXgVAlcR54/6ro6R42/0F3bZw0ZFVXvgRRjCZW6m4FyHq4AL\n+gfAV0HERkMdlO1zBpBwkSURekDc9NvlAkAA3zj6k9jlZoLbR50u1fHy4wFdzUw0\neCQ5nNrsoNbkHOJQGb7dtmmSc9lNUBsqAp53hi0MX2xy0UWN2e1DKkaZAkBi9stH\n7OQYRGVZkVVcI8Cghu7GjN3ZlhsndMsPzkIpMFTQ1yI5OIsEhpZH9co+rFU1mQcT\nCe1kzwKacU+b/2xhAkEAovqzUMFB9YEbc8C9AzTej5F2ttyuKBDJJ+kvQeJP+PnW\n4ovFI4Ee5UmTWI6k/Md9BM+MvEMWs3nPoF4MULHqNg==\n-----END RSA PRIVATE KEY-----'''\n]\n\n// https://github.com/jenkinsci/digitalocean-plugin/blob/digitalocean-plugin-0.17/src/main/java/com/dubture/jenkins/digitalocean/SlaveTemplate.java\nSlaveTemplate agentTemplate = new SlaveTemplate(\n  agentTemplateParameters.name,\n  agentTemplateParameters.imageId,\n  agentTemplateParameters.sizeId,\n  agentTemplateParameters.regionId,\n  agentTemplateParameters.username,\n  agentTemplateParameters.workspacePath,\n  agentTemplateParameters.sshPort,\n  agentTemplateParameters.idleTerminationInMinutes,\n  agentTemplateParameters.numExecutors,\n  agentTemplateParameters.labelString,\n  agentTemplateParameters.labellessJobsAllowed,\n  agentTemplateParameters.instanceCap,\n  agentTemplateParameters.installMonitoring,\n  agentTemplateParameters.tags,\n  agentTemplateParameters.userData,\n  agentTemplateParameters.initScript\n)\n\n// https://github.com/jenkinsci/digitalocean-plugin/blob/digitalocean-plugin-0.17/src/main/java/com/dubture/jenkins/digitalocean/DigitalOceanCloud.java\nDigitalOceanCloud digitalOceanCloud = new DigitalOceanCloud(\n  cloudParameters.name,\n  cloudParameters.authToken,\n  cloudParameters.privateKey,\n  cloudParameters.sshKeyId,\n  cloudParameters.instanceCap,\n  cloudParameters.usePrivateNetworking,\n  cloudParameters.timeoutMinutes,\n  cloudParameters.connectionRetryWait,\n  [agentTemplate]\n)\n\n// get Jenkins instance\nJenkins jenkins = Jenkins.getInstance()\n\n// add cloud configuration to Jenkins\njenkins.clouds.add(digitalOceanCloud)\n\n// save current Jenkins state to disk\njenkins.save()\n```\n\n# Configure plugin via Jenkins Configuration As Code\n\n```yaml\njenkins:\n  clouds:\n    - digitalOcean:\n        authToken: \"01234567890123456789012345678901234567890123456789\"\n        connectionRetryWait: 10\n        instanceCap: 5\n        name: \"mycompany\"\n        privateKey: |\n          ----BEGIN RSA PRIVATE KEY-----\n          MIICWwIBAAKBgGuoiHtwl8T2cKfclsWLOcv8S6p74iOAQX1kwCLvLy7ioDFlNzsI\n          U235N1StnZYZIwGla+3Uo3jMSUuWkMH85+d3KoRFPS+6RJCiAvMI0hr8FByes22v\n          DAVDnhkZ2SFOeh1SPxWDygPo2fW5sgqL2eYLO1CplDdqYhHLAL1FDV5tAgMBAAEC\n          gYBWRZoJgXK9zdb9TZIs/6LzSlzAY8IWPOM+PwyRcibXZZiFvNyDm+pviHTEkNRl\n          wgMBgLR6xBmz5dEel6utKKQVEPtD1m6N+z6hwUw+Nis35DCvmBX+hQSK+atGgjYH\n          ZKz0oqWUSuzHG+CxxcrePDTYJ4fdSyLPsQqaWoCZseDDwQJBANLey9r+juBEQe2N\n          MJoZTU1q/AoS5kY7OWQ1aF495I9fz87u9vx8BJh8djvmABwidUWREnd4vwwEIS3M\n          JtFGn+kCQQCCsvBvOXgVAlcR54/6ro6R42/0F3bZw0ZFVXvgRRjCZW6m4FyHq4AL\n          +gfAV0HERkMdlO1zBpBwkSURekDc9NvlAkAA3zj6k9jlZoLbR50u1fHy4wFdzUw0\n          eCQ5nNrsoNbkHOJQGb7dtmmSc9lNUBsqAp53hi0MX2xy0UWN2e1DKkaZAkBi9stH\n          7OQYRGVZkVVcI8Cghu7GjN3ZlhsndMsPzkIpMFTQ1yI5OIsEhpZH9co+rFU1mQcT\n          Ce1kzwKacU+b/2xhAkEAovqzUMFB9YEbc8C9AzTej5F2ttyuKBDJJ+kvQeJP+PnW\n          4ovFI4Ee5UmTWI6k/Md9BM+MvEMWs3nPoF4MULHqNg==\n          -----END RSA PRIVATE KEY-----\n        sshKeyId: 1234567\n        templates:\n          - idleTerminationInMinutes: 10\n            imageId: \"docker-20-04\"\n            installMonitoring: false\n            instanceCap: 2\n            labellessJobsAllowed: false\n            name: \"docker-20-04\"\n            numExecutors: 1\n            regionId: \"tor1\"\n            setupPrivateNetworking: false\n            sizeId: \"s-1vcpu-1gb\"\n            sshPort: 22\n            username: \"root\"\n            workspacePath: \"/jenkins/\"\n        timeoutMinutes: 5\n        usePrivateNetworking: false\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenkinsci%2Fdigitalocean-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjenkinsci%2Fdigitalocean-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenkinsci%2Fdigitalocean-plugin/lists"}