Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ivan-pinatti/38f325c9d15893ef3b008f7d03ea2669 to your computer and use it in GitHub Desktop.
Save ivan-pinatti/38f325c9d15893ef3b008f7d03ea2669 to your computer and use it in GitHub Desktop.
Jenkins - Set Docker remote slaves plugin parameters via groovy script - #jenkins #groovy #docker #jenkins-docker #jenkins-slave #jenkins-slaves #docker-slaves
#!groovy
/*
Please read carefully the plugin and Docker service docs
It is required to enable the options below in the Docker service for this plugin to work:
DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"
Also, you need to secure your Docker daemon socket, steps here:
https://docs.docker.com/engine/security/https/
More plugin information at:
https://wiki.jenkins.io/display/JENKINS/Docker+Plugin
*/
// imports
import com.cloudbees.plugins.credentials.CredentialsScope
import com.cloudbees.plugins.credentials.domains.Domain
import com.nirima.jenkins.plugins.docker.DockerCloud
import com.nirima.jenkins.plugins.docker.DockerTemplate
import com.nirima.jenkins.plugins.docker.DockerTemplateBase
import com.nirima.jenkins.plugins.docker.launcher.AttachedDockerComputerLauncher
import io.jenkins.docker.connector.DockerComputerAttachConnector
import jenkins.model.Jenkins
import org.jenkinsci.plugins.docker.commons.credentials.*
// parameters
def dockerTemplateBaseParameters = [
bindAllPorts: false,
bindPorts: '',
cpuShares: null,
dnsString: '',
dockerCommand: '',
environmentsString: '',
extraHostsString: '',
hostname: '',
image: 'jenkinsci/slave:latest',
macAddress: '',
memoryLimit: null,
memorySwap: null,
network: '',
privileged: false,
pullCredentialsId: '',
tty: true,
volumesFromString: '',
volumesString: ''
]
def DockerTemplateParameters = [
instanceCapStr: '',
labelString: 'remote.docker.jenkins.slave',
remoteFs: ''
]
def dockerServerCredentialsParameters = [
id: 'remote-docker-key',
description: 'Remote Docker credentials',
clientKey: '''-----BEGIN RSA PRIVATE KEY-----
asdasdada65464654654654645dxnHOskhqxVuLK9z1Z95pLva6DMaxn2ebJx230
f5dj8NPQHEf/vIDAGSJO9zDuboKhrZf2sdJAmHAeAAqqr5wu3DLsUgLeASXv0d6x
nkLWHR/NxddQc10CggEBAMV504+KaPVmB6LLjo55mpl96SJmHyqBivhGm5m0Li/b
p+Dw5g2L3SDMCGELzrd6xfZa5iXTPA3hOKWH0t/4PiKF+fWqEysYWNpUYp3NZSZi
FbVT/I9hZm37ocRbSNLaGZNJTCasdasdaasdasddqwqe5465q7w6e7qw6q7e6qwe
T/5s5moAV4uOYtfLl2eo3Pqro8e2vW4LPcJlQKOHWFwuNAJivYWeCPYhWfWKYikL
lMvp2xxd5jr+21rW8dCDu0LXiouI6FaygLldABU6loUCggEBAOcHy7hcfqkB3SbG
uByTy7a1zq39RaieRq4Fo9UT7TE7AczXt5Fz7asFsj5TBjA14zgFZ/7k00tzi8kh
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
uW3bpJlnvbyE/TDffqVY8dIItD6ePSO9vYb00g2pg6cTvxIvOiQW2Y0FnOiBgMKD
YxkUSNeKd7uE0JDSoPEVAQP/SFqwOuIdMH1HCp+0jwyqwr0w4XrK9uUe+PflUv2V
i/ju1tAYKzC8l2NTbGhgLPLoxdGv6gpIGZc5eadP9TrJZV3ullCeQyF8AhH/5i/6
IePsH2qtRauTakom7ciqZXtg0/6Fb37i6mGG7Hi4mbRM5fBMV2FXEP5OhZVN7gv6
N2W+R832OhQuebFKnZRx1SyQMkvZUDECggEAO8l7U575eKTk+XFPLLiqMzaNC72P
hoK9jZ+0XWRkKuTjggqFVUXTTGzxegbdtkubpT99V0CKBMyu4cV0jeTjIvZmeCkw
EGN3RrNvk3BuPdznkJ2VJg5Hp49JjOm+VYMMutyFdE7hwt0nmDKBBH72e8F+3GiV
Q3A8+0X9SJs3466yfsZzrX4YMfL1nVydJr2kK5H1KmbZrsUXZ8FNaGXAZhD4GdtW
Hkz6JJmHCBFWiomX5iSYBeq2kBPP0Lhk7fTbDC/nBF9CdUced+NAk9E8tPTrvLuz
ueTYuz4puzG3uFXb6/wcKkjQOB4jQz8rZl5QjsArQGhBxu1PjYjqSBd7DA==
-----END RSA PRIVATE KEY-----''',
clientCertificate: '''-----BEGIN CERTIFICATE-----
MIIFUjCCAzqgAwIBAgIJAPSpKmigPs2FMA0GCSqGSIb3DQEBCwUAMIGAMQswCQYD
VQQGEwJDQTEQMA4GA1UECAwHT250YXJpbzEQMA4GA1UEBwwHVG9yb250bzEPMA0G
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
tN07CXDebfw0E9RQHMDUMC0K6UwqE4ajRQaWdmNL/TJ8MlAQqe5E1uxpcPw/WPXQ
Hwq+LND1UbDkg4N9cHDT/EIakqf4I/m1jXGnygXjYzfOK/akV01yNbn0STIoz8SM
DafESy/YCBoIb6G1PQyETPjK/D+QVFKKA2SEsRy9bYbvNOVe+tbCc+AAhAuRuJ8s
dc4SWoILOABTSp9mmnirMSYPJPVEFK9Buh+dRk4guSZNZnsZQwtTPHQShKANOoQN
v9tHGmAk65wmuV+fmCRE4AyZjOVDQTTiJib7/zVQZz+B+rCYH9wOkyhMy3bbeF9D
zT+1gh0tf3QtasFRX01SYR9MCq3AAxgD/khPJyo3jg6nJJWjihe1sf6ixHZtUQID
AQABoz0wOzAkBgNVHREEHTAbgg01Mi4yMzMuMzQuMjI1hwQKFQKEhwR/AAABMBMG
A1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4ICAQCc4m2i9a+S/ho4
9D3FYhxZvtvbZDvn+5Cd/1aZvVyJLWk5HIDIxsIzMj04/tXQO3KpHyJrZpZy7/Sz
NtsYmNHGrmsFhmHY9b2r6jCoiuiP4RgVtzMxLbJK2QzJmiJTON4nVxp+PHZK9iv4
MTwDoCDpDjHvc0v7E3LXTt5N/5YlzG36wRKiIZt3E+KvqQkM/s0BjsLHfKYTCz55
JHEIQE0w10Y9qG62aQ7pqzOrX8jwc1lyzCyN++ga00CBWahC4UZoOU0aRs1mFPUC
VCN3OFH3KSLoPQaUWtohT1fK5e2py8oWqZM+KKTEBqnbf8zlYN2STszmEesQtJAY
REWTXnn0Sa6g1zBqN0R+FXCYOwRI2EhBG+U1HOACOvEoqZcZ8Mhqbg2Qw2ujPZR3
ImjRzuKoSrtRMh2femR9cgLkvB76y6gwKt2AFAj1dS9d7JZF88/S2aEpBDRURzQc
stpkJyAMvGcD5bco6jLKjbjxHTXgEIl/kcaX5G5ryND+ZE1qWcGaP1Vp7curoYAw
FerqhAUTc4NcchZRPfm/9gNskBrA4E4fm9UAzSXFd19gYatk++xA47h1IO+P+b4t
oYzDM/lFFLFSR80ZM9Edlwk9mdKN4iY0YkrPxiAOUu8/yl89cxnaISesEAsLwWyq
kr1eFuMAZClYiSHvSIj1nTmKhdKsIQ==
-----END CERTIFICATE-----''',
serverCaCertificate: '''-----BEGIN CERTIFICATE-----
MIIF1TCCA72gAwIBAgIJAJYJsqaA/PumMA0GCSqGSIb3DQEBCwUAMIGAMQswCQYD
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
+gDBgm6Byhxa16tSA4Wa7CRocj6j1vlaLHe7UqUWmN8Bz0oGhcbQkPz7+guF5eWx
7P6J0TgeW4HQcpwgndUlp++tGzcjb4pvNQdp0HLjj2p2XcpsQa3hKKSkCGoKwoXm
MkbYFI3u4QI0pnQs7Zs4EgiXPdgqNwLCivXyj5MuRcrctYhd3SPhcvcwrMMdorIK
CKj8beexyzFTis498YMAabB0slNsgZrVPxiBLOOJIz04J82g11+4atUmX+8FBDj5
sSFaa0jjUgaLqH6xk7u/fYSY1m/7+roG0A+mEnc7kNd1RODzCiTQJ68nmEYWF7DZ
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
JQv1e1yjQq2OAWY3cLRH5HUFDKseUc7402fkdszicGLNmQaVoLcaPmTSFzimv62b
N6uQVYW9MB8GA1UdIwQYMBaAFBImnhefgR2isFfoasMQN6uQVYW9MAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQELBQADggIBAK9vwJvtcMNNJv+LVH6cDJGgFBfh4Hzh
OrDX5ROs+4S6YykguxjZ7mnwe+/YKOp0oW8eXk1PaIS0aEqCq8WOJNV5gUQH6jMl
Ip1J5FKsywE/YMxZofrWZS5K8YoOwA8XA8jKU7F4o++ti2fQTPWaJJptKXeX+cXa
kyHZZQwOzTKWJgpIF6otRka49s+hqcEGfCporSw6aouiweTom+6RdKFkhEM1tvCH
UfCP5yauQYMCO7a8iSkC2clGqKN1WbIgfn84o24+0XLJMVHOOXFbWeAQ8Y3xClWq
yeKDL/hHjTsy/tVK69Z5KZ3HTmgWckPdidWEBU1fi3Vhk7bLO85YOQSTN9Jqvuib
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
asdsadasdadqwe4q5we4q654eq654e6q5w4e6q54we6q54w65q4e65q4w65e4q65
EW+/m63RE6wTEKAa/zrjrp9VKlgHjJZpo20JV0XJjA8Iv0YU7MrrOUS8i6FZSj5M
1iMvhexj3Wz7JqAjFLsElvmJsUfXvqXQ2hPcZ1ZTru1nR2Q5RVtA3VS0pnFCuGK9
ba6x/77skkOd
-----END CERTIFICATE-----'''
]
def dockerCloudParameters = [
connectTimeout: 180,
containerCapStr: '4',
credentialsId: dockerServerCredentialsParameters.id,
dockerHostname: '',
name: 'remote.docker.dev',
readTimeout: 0,
serverUrl: 'tcp://00.100.100.100:2376',
version: ''
]
// https://github.com/jenkinsci/docker-commons-plugin/blob/docker-commons-1.10/src/main/java/org/jenkinsci/plugins/docker/commons/credentials/DockerServerCredentials.java
DockerServerCredentials dockerServerCredentials = new DockerServerCredentials(
CredentialsScope.GLOBAL,
dockerServerCredentialsParameters.id,
dockerServerCredentialsParameters.description,
dockerServerCredentialsParameters.clientKey,
dockerServerCredentialsParameters.clientCertificate,
dockerServerCredentialsParameters.serverCaCertificate
)
// https://github.com/jenkinsci/docker-plugin/blob/docker-plugin-1.1.2/src/main/java/com/nirima/jenkins/plugins/docker/DockerTemplateBase.java
DockerTemplateBase dockerTemplateBase = new DockerTemplateBase(
dockerTemplateBaseParameters.image,
dockerTemplateBaseParameters.pullCredentialsId,
dockerTemplateBaseParameters.dnsString,
dockerTemplateBaseParameters.network,
dockerTemplateBaseParameters.dockerCommand,
dockerTemplateBaseParameters.volumesString,
dockerTemplateBaseParameters.volumesFromString,
dockerTemplateBaseParameters.environmentsString,
dockerTemplateBaseParameters.hostname,
dockerTemplateBaseParameters.memoryLimit,
dockerTemplateBaseParameters.memorySwap,
dockerTemplateBaseParameters.cpuShares,
dockerTemplateBaseParameters.bindPorts,
dockerTemplateBaseParameters.bindAllPorts,
dockerTemplateBaseParameters.privileged,
dockerTemplateBaseParameters.tty,
dockerTemplateBaseParameters.macAddress,
dockerTemplateBaseParameters.extraHostsString
)
// https://github.com/jenkinsci/docker-plugin/blob/docker-plugin-1.1.2/src/main/java/com/nirima/jenkins/plugins/docker/DockerTemplate.java
DockerTemplate dockerTemplate = new DockerTemplate(
dockerTemplateBase,
new DockerComputerAttachConnector(),
DockerTemplateParameters.labelString,
DockerTemplateParameters.remoteFs,
DockerTemplateParameters.instanceCapStr
)
// https://github.com/jenkinsci/docker-plugin/blob/docker-plugin-1.1.2/src/main/java/com/nirima/jenkins/plugins/docker/DockerCloud.java
DockerCloud dockerCloud = new DockerCloud(
dockerCloudParameters.name,
[dockerTemplate],
dockerCloudParameters.serverUrl,
dockerCloudParameters.containerCapStr,
dockerCloudParameters.connectTimeout,
dockerCloudParameters.readTimeout,
dockerCloudParameters.credentialsId,
dockerCloudParameters.version,
dockerCloudParameters.dockerHostname
)
// get Jenkins instance
Jenkins jenkins = Jenkins.getInstance()
// get credentials domain
def domain = Domain.global()
// get credentials store
def store = jenkins.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()
// add credential to store
store.addCredentials(domain, dockerServerCredentials)
// add cloud configuration to Jenkins
jenkins.clouds.add(dockerCloud)
// save current Jenkins state to disk
jenkins.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment