{"id":50050,"date":"2026-06-23T05:56:48","date_gmt":"2026-06-23T05:56:48","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=50050"},"modified":"2026-06-23T05:56:50","modified_gmt":"2026-06-23T05:56:50","slug":"openshift-lab-2-install-an-application-from-source-code-in-a-github-repository-using-the-openshift-web-console","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/openshift-lab-2-install-an-application-from-source-code-in-a-github-repository-using-the-openshift-web-console\/","title":{"rendered":"Openshift: Lab 2 &#8211; Install an application from source code in a GitHub repository using the OpenShift web console"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What this lab teaches<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The lab teaches how to use the <strong>OpenShift web console<\/strong> to deploy an application directly from source code stored in GitHub. The example uses OpenShift\u2019s <strong>Source-to-Image<\/strong>, also called <strong>S2I<\/strong>, process. OpenShift downloads the source code, builds a container image, creates pods, creates a service, and optionally creates a route so the application can be accessed from a browser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before doing this lab, the learner should understand:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Required Knowledge<\/th><th>Why It Matters<\/th><\/tr><\/thead><tbody><tr><td>OpenShift and Kubernetes relationship<\/td><td>OpenShift runs applications on Kubernetes<\/td><\/tr><tr><td>Public Git repositories such as GitHub<\/td><td>Source code is pulled from GitHub<\/td><\/tr><tr><td>OpenShift web console access<\/td><td>The lab uses the GUI, not CLI<\/td><\/tr><tr><td>Administrator and Developer perspectives<\/td><td>The lab uses the Developer view and <code>+Add<\/code> flow<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Application used in the lab<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Item<\/th><th>Value<\/th><\/tr><\/thead><tbody><tr><td>Application type<\/td><td>Python web application<\/td><\/tr><tr><td>Builder image<\/td><td>Python 3.9<\/td><\/tr><tr><td>Git repository<\/td><td><code>https:\/\/github.com\/openshift-instruqt\/blog-django-py<\/code><\/td><\/tr><tr><td>Deployment resource type<\/td><td>Deployment<\/td><\/tr><tr><td>Route<\/td><td>Enabled<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Complete lab flow<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Action<\/th><th>Details<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Open Developer Sandbox<\/td><td>Start from the Developer Sandbox entry page<\/td><\/tr><tr><td>2<\/td><td>Log in<\/td><td>Use Red Hat account credentials<\/td><\/tr><tr><td>3<\/td><td>Open OpenShift web console<\/td><td>Go into the OpenShift console<\/td><\/tr><tr><td>4<\/td><td>Click <code>+Add<\/code><\/td><td>Use the left-side menu<\/td><\/tr><tr><td>5<\/td><td>Search for Python<\/td><td>In the Developer Catalog \/ All Services page<\/td><\/tr><tr><td>6<\/td><td>Select Python<\/td><td>Choose the Python service\/template<\/td><\/tr><tr><td>7<\/td><td>Click <code>Create<\/code><\/td><td>Opens the Source-to-Image application form<\/td><\/tr><tr><td>8<\/td><td>Select Python 3.9<\/td><td>The lab specifically uses Python 3.9 builder image<\/td><\/tr><tr><td>9<\/td><td>Enter Git repo URL<\/td><td>Use the GitHub repo above<\/td><\/tr><tr><td>10<\/td><td>Review auto-filled fields<\/td><td>OpenShift fills Application and Name fields<\/td><\/tr><tr><td>11<\/td><td>Set resource type<\/td><td>Choose <code>Deployment<\/code><\/td><\/tr><tr><td>12<\/td><td>Enable route<\/td><td>Select <code>Create a route to the Application<\/code><\/td><\/tr><tr><td>13<\/td><td>Click <code>Create<\/code><\/td><td>Starts the build and deployment process<\/td><\/tr><tr><td>14<\/td><td>Watch Topology<\/td><td>App appears as a circle in Topology view<\/td><\/tr><tr><td>15<\/td><td>Wait for build completion<\/td><td>Light blue during build, dark blue when running<\/td><\/tr><tr><td>16<\/td><td>Open application<\/td><td>Click the external\/open-url icon on the app graphic<\/td><\/tr><tr><td>17<\/td><td>Delete application<\/td><td>Right-click the application in Topology and choose Delete Application<\/td><\/tr><tr><td>18<\/td><td>Confirm deletion<\/td><td>Type the application name when prompted<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What OpenShift creates automatically<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you complete the form and click <strong>Create<\/strong>, OpenShift automatically creates several resources:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Resource<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>Build \/ S2I process<\/td><td>Builds container image from Git source<\/td><\/tr><tr><td>Container image<\/td><td>Application runtime image<\/td><\/tr><tr><td>Pod<\/td><td>Runs the application container<\/td><\/tr><tr><td>Deployment<\/td><td>Manages the application rollout<\/td><\/tr><tr><td>Service<\/td><td>Provides internal cluster networking<\/td><\/tr><tr><td>Route<\/td><td>Provides browser-accessible external URL<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Important concepts from the lab<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Concept<\/th><th>Explanation<\/th><\/tr><\/thead><tbody><tr><td>Source-to-Image<\/td><td>OpenShift builds a container image directly from source code<\/td><\/tr><tr><td>Developer Catalog<\/td><td>Web console area used to choose app templates\/services<\/td><\/tr><tr><td>Builder image<\/td><td>Base\/runtime image used to build the application<\/td><\/tr><tr><td>Git Repo URL<\/td><td>Source location OpenShift pulls from<\/td><\/tr><tr><td>Deployment<\/td><td>Kubernetes\/OpenShift object that manages running pods<\/td><\/tr><tr><td>Route<\/td><td>OpenShift object that exposes the app externally<\/td><\/tr><tr><td>Topology view<\/td><td>Visual view of running applications in OpenShift<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">CLI equivalent of the same lab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The PDF uses the web console, but the rough CLI equivalent would be:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-project lab2-python\noc <span class=\"hljs-keyword\">new<\/span>-app python:<span class=\"hljs-number\">3.9<\/span>~https:<span class=\"hljs-comment\">\/\/github.com\/openshift-instruqt\/blog-django-py --name=blog-django-py<\/span>\noc expose svc\/blog-django-py\noc <span class=\"hljs-keyword\">get<\/span> route\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then open the route URL in your browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To delete it:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> all -l app=blog-django-py\noc <span class=\"hljs-keyword\">delete<\/span> route blog-django-py\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab-2.pdf\" type=\"application\/pdf\" style=\"width:100%;height:2000px\" aria-label=\"Embed of Openshift Lab 2.\"><\/object><a id=\"wp-block-file--media-241def71-5386-42de-bae8-0f1c88cdfe72\" href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab-2.pdf\">Openshift Lab 2<\/a><a href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab-2.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-241def71-5386-42de-bae8-0f1c88cdfe72\">Download<\/a><\/div>\n\n\n<!-- PDF Embedder: Please provide an \"URL\" attribute in your shortcode. -->","protected":false},"excerpt":{"rendered":"<p>What this lab teaches The lab teaches how to use the OpenShift web console to deploy an application directly from source code stored in GitHub. The example&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5153],"tags":[],"class_list":["post-50050","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=50050"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50050\/revisions"}],"predecessor-version":[{"id":77142,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50050\/revisions\/77142"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=50050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=50050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=50050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}