Last active
February 4, 2018 01:28
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!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