Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Sample for Jenkins Workflow plug-in and Docker

This sample makes use of the Jenkins Workflow plug-in and Docker to show how you can implement a continuous delivery pipeline.

About Jenkins Workflow

The Jenkins Workflow feature allows you to write the build steps in a Groovy script instead of clicking the build together in a UI. To use that feature you need this plug-in: https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin

Pros

  • The build script can be stored and versioned together with you source
  • Allows you to handle pipelines in one build

Cons

  • The feature is still quite new
  • You have to gather information from many different places to learn about it

Links

Here are some of the links that might be useful:

About Docker in Jenkins Workflow

To use Docker from within a Jenkins Workflow script you need this plug-in: CloudBees Docker Workflow Plugin. This plug-in provides a docker variable to the scripts that can execute different Docker commands. Here is the documentation for the Docker step. And if you want to know exactly what's in the docker variable, here is its source.

What is in this project

LocationContent
booksA simple REST service implemented using Spring Boot. This is our "application".
gradleThe Gradle wrapper we use to build the stuff.
integrationtestThe scripts to execute the integration tests.
jenkinsA docker image for a Jenkins build server that already contains the workflow plug-ins and the docker tools.
JenkinsfileThe Jenkins workflow script with the instructions for the continuous delivery pipeline.

How to make this work

Here are the steps that we are going into more detail below:

  • First you need Docker on your computer
  • Then we create and start the Jenkins docker image
  • And finally configure a multibranch workflow build job

Docker prerequisites

This is not a tutorial on Docker, so I assume you know how this stuff works. Docker can be found on https://docker.com. Install it and make sure everything works fine.

Open docker daemon for TCP connections

On Linux the Docker tools communicate using non-networked sockets. But since we are accessing the Docker daemon from within another container, the daemon needs to be accessible via HTTP.

WARNING: Opening the Docker daemon to HTTP is a security risk. Please do this only in a trusted network.

As described here you can configure different protocols in /etc/default/docker. We bind the TCP to all IPs on the machine by adding -H tcp://0.0.0.0:2376 to DOCKER_OPTS.

DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

Don't forget to restart the service. If your client needs some configuration maybe this list of environment variables might help.

The final test to see if it works is to query something via the Docker API.

curl --get http://192.168.1.110:2376/version

Of course you use your own IP, but then you should see something like this:

{"Version":"1.9.1","ApiVersion":"1.21","GitCommit":"a34a1d5",
"GoVersion":"go1.4.2","Os":"linux","Arch":"amd64",
"KernelVersion":"3.13.0-39-generic",
"BuildTime":"Fri Nov 20 13:12:04 UTC 2015"}

Create and start the Jenkins Docker image

In the jenkins folder you find two scripts. One to build, and one to run the Docker image.

Build

The Dockerfile inherits form the jenkins base image, installs the Docker tools and downloads all the plugins defined in plugins.txt.

Run

The run script first tries to determine the IP address of the Docker daemon. This is necessary because we need to set the environment variable in the Jenkins server so that it knows where to find the Docker daemon.

If it does not work, you might just edit the script and give it the correct IP.

When starting the new Docker container it maps the port 8080 and the ~/jenkins_home from your computer to the container.

If the server is up and running you should be able to open it in a browser on http://localhost:8080 (or the IP of your Docker daemon instead of localhost).

Configure a multibranch workflow build job

  • On the Jenins server create a New Item
  • Give it a sensible name
  • Choose Multibranch Workflow
  • And hit Ok
  • Add a Git repository to Branch Sources and use the URL https://github.com/MicroserviceWorkshop/JenkinsWorkflowDockerSample.git
  • Press Save
  • And let the magic happen
  • First it does index the branches of the repository
  • It finds the master branch and starts to build it

If everything works fine the build will not finish. If you have a look at the log you should see something like:

Do you want to deploy to the UAT system?
Proceed or Abort

This is one of the input steps of the Jenkinsfile. Choose as you wish.

Well, if everything is blue (or gray if you aborted) you're done. Congratulations!

The Jenkinsfile

This file contains the whole definition of the CI/CD pipeline. I hope it speaks for itself.

If you want to play around with the Jenkinsfile script you can do the follwoing:

  • On the Jenins server create a New Item
  • Give it a sensible name
  • This time choose Workflow instead
  • And hit Ok
  • Copy/paste the contents of the Jenkinsfile into the Workflow Script area
  • Press Save

Now you can run the job, modify the script and run again.

About

Sample for Jenkins Workflow plug-in and Docker

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages