{"id":3463,"date":"2018-10-05T12:56:34","date_gmt":"2018-10-05T17:56:34","guid":{"rendered":"http:\/\/lisa.rushworth.us\/?p=3463"},"modified":"2018-10-05T12:56:34","modified_gmt":"2018-10-05T17:56:34","slug":"jenkins-creating-a-build-pipeline","status":"publish","type":"post","link":"https:\/\/www.rushworth.us\/lisa\/?p=3463","title":{"rendered":"Jenkins: Creating A Build Pipeline"},"content":{"rendered":"<p><strong>Prerequisites: <\/strong><\/p>\n<p>You will need the \u201cGit\u201d plugin (<a href=\"https:\/\/plugins.jenkins.io\/git\">https:\/\/plugins.jenkins.io\/git<\/a>).<\/p>\n<p>You will need the \u201cGitHub\u201d plugin (<a href=\"https:\/\/plugins.jenkins.io\/github\">https:\/\/plugins.jenkins.io\/github<\/a>)<\/p>\n<p><strong>Setting Up Access Within GitHub:<\/strong><\/p>\n<p>Log into GitHub and navigate to your repository. Click the \u201cSettings\u201d tab, then select \u201cDeveloper settings\u201d from the bottom of the left-hand menu. From the Developer Settings page, select \u201cPersonal access tokens\u201d.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3464\" rel=\"attachment wp-att-3464\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3464\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow01.png\" alt=\"\" width=\"338\" height=\"481\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow01.png 338w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow01-211x300.png 211w\" sizes=\"auto, (max-width: 338px) 100vw, 338px\" \/><\/a><\/p>\n<p>Click \u201cGenerate new token\u201d to add a token for your Jenkins integration.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3465\" rel=\"attachment wp-att-3465\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3465\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow02-1024x228.png\" alt=\"\" width=\"960\" height=\"214\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow02-1024x228.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow02-300x67.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow02-768x171.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow02.png 1327w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Provide a description for the token and select permissions \u2013 read access to the repo is sufficient.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3466\" rel=\"attachment wp-att-3466\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3466\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow03-1024x537.png\" alt=\"\" width=\"960\" height=\"503\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow03-1024x537.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow03-300x157.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow03-768x403.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow03.png 1281w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Save the token and copy the secret text.<\/p>\n<p><strong>Setting Up Jenkins \u2013 Configuring GitHub Integration<\/strong><\/p>\n<p>On your Jenkins server, select \u201cManage Jenkins\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3467\" rel=\"attachment wp-att-3467\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3467\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow04.png\" alt=\"\" width=\"460\" height=\"626\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow04.png 460w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow04-220x300.png 220w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/a><\/p>\n<p>Select \u201cConfigure System\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3468\" rel=\"attachment wp-att-3468\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3468\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow05-1024x509.png\" alt=\"\" width=\"960\" height=\"477\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow05-1024x509.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow05-300x149.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow05-768x382.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow05.png 1176w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Scroll down \u2013 possibly a lot \u2013 to the GitHub section. Click on the \u201cAdd GitHub Server\u201d drop-down and select \u201cGitHub Server\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3469\" rel=\"attachment wp-att-3469\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3469\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow06.png\" alt=\"\" width=\"842\" height=\"332\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow06.png 842w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow06-300x118.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow06-768x303.png 768w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><\/a><\/p>\n<p>Provide a name, the API URL is pre-populated. Next to Credentials, click the drop-down for \u201cAdd\u201d and select \u201cJenkins\u201d.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3470\" rel=\"attachment wp-att-3470\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3470\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow07-1024x359.png\" alt=\"\" width=\"960\" height=\"337\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow07-1024x359.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow07-300x105.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow07-768x269.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow07.png 1067w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>The credential kind is \u201cSecret text\u201d, and \u201cID\u201d is your GitHub user ID. Save the credential<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3471\" rel=\"attachment wp-att-3471\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3471\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow08-1024x409.png\" alt=\"\" width=\"960\" height=\"383\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow08-1024x409.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow08-300x120.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow08-768x307.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow08.png 1433w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Select cred from drop-down and test<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3473\" rel=\"attachment wp-att-3473\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3473\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow09.png\" alt=\"\" width=\"994\" height=\"438\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow09.png 994w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow09-300x132.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow09-768x338.png 768w\" sizes=\"auto, (max-width: 994px) 100vw, 994px\" \/><\/a><\/p>\n<p>Hopefully the credentials are verified, you are done.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3474\" rel=\"attachment wp-att-3474\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3474\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow10.png\" alt=\"\" width=\"594\" height=\"117\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow10.png 594w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow10-300x59.png 300w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/a><\/p>\n<p><strong>Using Jenkins \u2013 Creating A Basic Pipeline:<\/strong><\/p>\n<p>Click on \u201cNew Item\u201d, create a new Freestyle project, and give it a descriptive name.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3475\" rel=\"attachment wp-att-3475\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3475\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow11-1024x334.png\" alt=\"\" width=\"960\" height=\"313\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow11-1024x334.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow11-300x98.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow11-768x251.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow11.png 1220w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Since this is a GitHub project, I\u2019m adding the project URL \u2013 that\u2019s the actual project URL, not the URL for a specific branch or the path to clone the project.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3476\" rel=\"attachment wp-att-3476\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3476\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow12-1024x475.png\" alt=\"\" width=\"960\" height=\"445\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow12-1024x475.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow12-300x139.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow12-768x357.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow12.png 1215w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>As you scroll down, the tab will change to \u201cSource Code Management\u201d. Select \u201cGit\u201d and enter the URL used to clone the repository. If you have not already added credentials, click \u201cAdd\u201d; otherwise select the appropriate credential from the drop-down menu. If you intend to build a branch <em>other<\/em> than master, correct the branch name.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3477\" rel=\"attachment wp-att-3477\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3477\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow13-1024x569.png\" alt=\"\" width=\"960\" height=\"533\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow13-1024x569.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow13-300x167.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow13-768x427.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow13.png 1227w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Build triggers will depend on what exactly you want to happen. You can trigger new builds based on PRs or push activity. You can schedule a nightly build.<\/p>\n<p>If there are a lot of changes, you may not wish to re-build the project <em>every single time<\/em> the repo changes. Conversely if the repo rarely changes, nightly builds waste a lot of cycles), etc.<\/p>\n<p>Using the hook trigger requires that your Jenkins server be Internet-accessible and as such has a non-zero risk of malicious access. You can expose your endpoint through a reverse proxy to have more control over service access. I have also experimented with using GitHub provided metadata, <a href=\"https:\/\/api.github.com\/meta\">https:\/\/api.github.com\/meta<\/a>, to restrict access to certain subnets. A potential attacker could still proxy their access by attempting to register <em>your<\/em> Jenkins endpoint in <em>their<\/em> GitHub project \u2026 but that\u2019s a narrower attack vector than \u201canyone who can make a web call\u201d.<\/p>\n<p>If you want to trigger builds based on changes within the GitHub project, you can configure Jenkins to automatically register webhooks or you can manually add the webhook to your project.<\/p>\n<p><em>Manual Webhook creation: <\/em>Within your project\u2019s \u201cSettings\u201d tab, select \u201cWebhooks\u201d and then \u201cAdd webhook\u201d.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3478\" rel=\"attachment wp-att-3478\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3478\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow14-1024x488.png\" alt=\"\" width=\"960\" height=\"458\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow14-1024x488.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow14-300x143.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow14-768x366.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow14.png 1359w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p><em>Automatic Webhook creation: <\/em>Manage Jenkins =&gt; Configure System. In the GitHub section, click the <em>second<\/em> \u201cAdvanced\u201d button (with a notepad next to it).<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3479\" rel=\"attachment wp-att-3479\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3479\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow15-1024x415.png\" alt=\"\" width=\"960\" height=\"389\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow15-1024x415.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow15-300x122.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow15-768x311.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow15.png 1436w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Click the \u201cAdditional Actions\u201d drop-down menu and select \u201cConvert login and password to token\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3480\" rel=\"attachment wp-att-3480\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3480\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow16-1024x288.png\" alt=\"\" width=\"960\" height=\"270\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow16-1024x288.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow16-300x84.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow16-768x216.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow16.png 1465w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Enter your credentials and click \u201cCreate token credentials\u201d<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3481\" rel=\"attachment wp-att-3481\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3481\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow17-1024x281.png\" alt=\"\" width=\"960\" height=\"263\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow17-1024x281.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow17-300x82.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow17-768x211.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow17.png 1419w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>A message will be displayed confirming the credential.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3482\" rel=\"attachment wp-att-3482\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3482\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow18-1024x323.png\" alt=\"\" width=\"960\" height=\"303\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow18-1024x323.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow18-300x95.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow18-768x243.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow18.png 1415w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>In this case, I will schedule a nightly build of the project. After selecting \u201cBuild periodically\u201d, enter the cron-like expression to control when you want builds to occur. To avoid having a <em>lot<\/em> of project builds initiated at quarter-hour marks, use the modifier \u201cH\u201d to indicate a time<em> range<\/em>. In this example, the build will be triggered some time between 02:00 and 04:59. Since the value of H is a hash of the job name, the build time will be consistent (i.e. the time displayed below the schedule field will be the time used each cycle). This means it is still <em>possible<\/em> to have a number of builds scheduled simultaneously.<\/p>\n<p>Time, by default, is relative to <em>your Jenkins\u2019 server JVM configuration. <\/em>You can override that setting by adding a TZ directive at the beginning of the schedule field.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3483\" rel=\"attachment wp-att-3483\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3483\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow19-1024x315.png\" alt=\"\" width=\"960\" height=\"295\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow19-1024x315.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow19-300x92.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow19-768x236.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow19.png 1140w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>There are a number of pre-build and post-build actions you can take, and various add-on modules expand this functionality. You can manage builds, Docker containerization, and deployment into Kubernetes clusters from Jenkins build pipelines.<\/p>\n<p>Once the job has been saved, you can run it immediately by returning to the dashboard. Click the little clock to the right of the item listing.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3484\" rel=\"attachment wp-att-3484\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3484\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow20-1024x187.png\" alt=\"\" width=\"960\" height=\"175\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow20-1024x187.png 1024w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow20-300x55.png 300w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow20-768x140.png 768w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow20.png 1446w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>Once a build has been completed, the item\u2019s workspace will contain the build and console output from the build job. If a job fails, console output is a good point to start troubleshooting.<\/p>\n<p><a href=\"http:\/\/lisa.rushworth.us\/?attachment_id=3485\" rel=\"attachment wp-att-3485\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3485\" src=\"http:\/\/lisa.rushworth.us\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow21.png\" alt=\"\" width=\"626\" height=\"529\" srcset=\"https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow21.png 626w, https:\/\/www.rushworth.us\/lisa\/wp-content\/uploads\/2018\/10\/JenkinsWorkflow21-300x254.png 300w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prerequisites: You will need the \u201cGit\u201d plugin (https:\/\/plugins.jenkins.io\/git). You will need the \u201cGitHub\u201d plugin (https:\/\/plugins.jenkins.io\/github) Setting Up Access Within GitHub: Log into GitHub and navigate to your repository. Click the \u201cSettings\u201d tab, then select \u201cDeveloper settings\u201d from the bottom of the left-hand menu. From the Developer Settings page, select \u201cPersonal access tokens\u201d. Click \u201cGenerate new &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[304,660,616],"class_list":["post-3463","post","type-post","status-publish","format-standard","hentry","category-technology","tag-automation","tag-ci-cd","tag-jenkins"],"_links":{"self":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3463"}],"version-history":[{"count":2,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3463\/revisions"}],"predecessor-version":[{"id":3486,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/3463\/revisions\/3486"}],"wp:attachment":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}