{"id":1197,"date":"2023-09-27T21:43:31","date_gmt":"2023-09-27T16:13:31","guid":{"rendered":"https:\/\/www.openwriteup.com\/?page_id=1197"},"modified":"2024-09-19T12:01:06","modified_gmt":"2024-09-19T06:31:06","slug":"docker-setup-and-agent-option","status":"publish","type":"page","link":"https:\/\/www.openwriteup.com\/?page_id=1197","title":{"rendered":"Docker setup and agent option"},"content":{"rendered":"<p>Install docker<\/p>\n<pre class=\"chroma\" tabindex=\"0\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Add Docker's official GPG key:<\/span>\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo apt-get update\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo apt-get install ca-certificates curl gnupg\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo install -m <span class=\"m\">0755<\/span> -d \/etc\/apt\/keyrings\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg <span class=\"p\">|<\/span> sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\r\n<\/span><\/span>\r\n<span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Add the repository to Apt sources:<\/span>\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"se\">\\\r\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"s2\">\"deb [arch=\"<\/span><span class=\"k\">$(<\/span>dpkg --print-architecture<span class=\"k\">)<\/span><span class=\"s2\">\" signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\r\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">  \"<\/span><span class=\"k\">$(<\/span>. \/etc\/os-release <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">echo<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$VERSION_CODENAME<\/span><span class=\"s2\">\"<\/span><span class=\"k\">)<\/span><span class=\"s2\">\" stable\"<\/span> <span class=\"p\">|<\/span> <span class=\"se\">\\\r\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\">  sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo apt-get update<\/span><\/span><\/code><\/pre>\n<p tabindex=\"0\">Install docker<\/p>\n<pre tabindex=\"0\">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<\/pre>\n<p tabindex=\"0\">Set the permissions on ubuntu host<\/p>\n<pre tabindex=\"0\">sudo usermod -a -G docker jenkins\r\nsudo chown jenkins:docker \/var\/run\/docker.sock\r\nsudo chmod 660 \/var\/run\/docker.sock<\/pre>\n<p tabindex=\"0\"><strong>Install docker and docker pipeline plugin from manage jenkins<\/strong><\/p>\n<p tabindex=\"0\">Lab 1: with single agent<\/p>\n<pre tabindex=\"0\">pipeline {\r\nagent {\r\ndocker { image 'node:18.18.0-alpine3.18' }\r\n  }\r\nstages {\r\n stage('Test') {\r\n  steps {\r\n   sh 'node --version'\r\n     }\r\n   }\r\n  }\r\n}<\/pre>\n<p><a href=\"https:\/\/docs.docker.com\/engine\/tutorials\/dockervolumes\/\">Docker Volumes<\/a>\u00a0to mount, which can be used for caching data on the\u00a0<a href=\"https:\/\/www.jenkins.io\/doc\/book\/glossary\/#agent\">agent<\/a>\u00a0between Pipeline runs. The following example will cache\u00a0<code>~\/.m2<\/code>\u00a0between Pipeline runs utilizing the\u00a0<a href=\"https:\/\/hub.docker.com\/_\/maven\/\"><code>maven<\/code>\u00a0container<\/a>, avoiding the need to re-download dependencies for subsequent Pipeline runs.<\/p>\n<p>lab2:<\/p>\n<pre>pipeline {\r\nagent {\r\n  docker {\r\n    image 'maven:3.9.3-eclipse-temurin-17'\r\n    args '-v $HOME\/.m2:\/root\/.m2'\r\n   }\r\n  }\r\nstages {\r\n  stage('Build') {\r\n   steps {\r\n    sh 'mvn --version'\r\n    }\r\n  }\r\n }\r\n}<\/pre>\n<p>Combining Docker and Pipeline allows a <code>Jenkinsfile<\/code>\u00a0to use\u00a0<strong>multiple<\/strong>\u00a0types of technologies, by combining the\u00a0<code>agent {}<\/code>\u00a0directive with different stages.<\/p>\n<p>lab3:<\/p>\n<pre>pipeline {\r\nagent {\r\ndocker {\r\nimage 'maven:3.9.3-eclipse-temurin-17'\r\nargs '-v $HOME\/.m2:\/root\/.m2'\r\n}\r\n}\r\nparameters {\r\nchoice(\r\nname: 'ENVIRONMENT',\r\nchoices: ['dev', 'qa', 'prod'],\r\ndescription: 'Select the deployment environment'\r\n)\r\n}\r\nstages {\r\nstage('SCM code') {\r\nsteps {\r\ngit 'https:\/\/github.com\/hellokaton\/java11-examples.git'\r\n}\r\n}\r\nstage('Build') {\r\nsteps {\r\nsh 'mvn clean package'\r\n}\r\n}\r\nstage('Test') {\r\nsteps {\r\nsh 'mvn test'\r\n}\r\n}\r\nstage('Deploy') {\r\nwhen {\r\nexpression { params.ENVIRONMENT == 'prod' }\r\n}\r\nsteps {\r\n\/\/ Add steps to deploy the application for 'prod'\r\necho 'Deploying to production...'\r\n}\r\n}\r\n}\r\npost {\r\nsuccess {\r\necho 'Pipeline succeeded!'\r\n\r\n\/\/ Add additional success steps if needed\r\n}\r\nfailure {\r\necho 'Pipeline failed!'\r\n\r\n\/\/ Add additional failure steps if needed\r\n}\r\n}\r\n}<\/pre>\n<p>lab4:<\/p>\n<p>Create Dockerfile [add to git]<\/p>\n<pre>FROM node:20.17.0-alpine3.20\r\n\r\nRUN apk add -U subversion<\/pre>\n<p>Create jenkinsfiledoc [add to git]<\/p>\n<pre>pipeline {\r\nagent { dockerfile true }\r\nstages {\r\nstage('Test') {\r\nsteps {\r\nsh 'node --version'\r\nsh 'svn --version'\r\n}\r\n}\r\n}\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Install docker # Add Docker&#8217;s official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d \/etc\/apt\/keyrings curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg &#8211;dearmor -o \/etc\/apt\/keyrings\/docker.gpg sudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg # Add the repository to Apt sources: echo \\ &#8220;deb [arch=&#8221;$(dpkg &#8211;print-architecture)&#8221; signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\ &#8220;$(. \/etc\/os-release &amp;&amp; echo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_oct_exclude_from_cache":false,"footnotes":""},"class_list":["post-1197","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/1197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1197"}],"version-history":[{"count":6,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/1197\/revisions"}],"predecessor-version":[{"id":1475,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/1197\/revisions\/1475"}],"wp:attachment":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}