Github_Actions/8. Service Containers _ Hands-on GitHub Actions_ Implement CI_CD with GitHub Action Workflows for Your Applications.html

26 lines
1.4 MiB
HTML
Raw Permalink Normal View History

2023-06-15 10:36:50 +02:00
<!DOCTYPE html> <html class="sevogelnj idc0_331" lang=en><!--
Page saved with SingleFile
url: https://learning.oreilly.com/library/view/hands-on-github-actions/9781484264645/html/502534_1_En_8_Chapter.xhtml
saved date: Tue Aug 03 2021 16:18:35 GMT+0200 (Central European Summer Time)
--><meta charset=utf-8>
<meta name=viewport content="width=device-width, initial-scale=1">
<meta name=theme-color content=#B9002D>
<meta data-react-helmet=true property=og:image content=https://learning.oreilly.com/covers/urn:orm:book:9781484264645/><meta data-react-helmet=true name=twitter:image content=https://learning.oreilly.com/covers/urn:orm:book:9781484264645/><meta data-react-helmet=true name=twitter:card content=summary><meta data-react-helmet=true name=twitter:creator content=@OReillyMedia><meta data-react-helmet=true name=twitter:site content=@OReillyMedia><meta data-react-helmet=true name=twitter:title content="O'Reilly Media - Technology and Business Training"><meta data-react-helmet=true property=twitter:account_id content=4503599627559754><meta data-react-helmet=true property=og:site_name content="O'Reilly Online Learning"><meta data-react-helmet=true name=publisher content=Apress><meta data-react-helmet=true property=og:book:author itemprop=author content="Chaminda Chandrasekara"><meta data-react-helmet=true property=og:book:author itemprop=author content="Pushpa Herath"><meta data-react-helmet=true property=og:type content=book><meta data-react-helmet=true property=og:book:isbn itemprop=isbn content=9781484264645>
<title>8.&nbsp;Service Containers | Hands-on GitHub Actions: Implement CI/CD with GitHub Action Workflows for Your Applications</title>
<style>@font-face{font-family:"ORM Icons";font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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
<meta itemprop=isPartOf content=/library/view/hands-on-github-actions/9781484264645/ data-react-helmet=true><meta property=og:url itemprop=url content=https://learning.oreilly.com/library/view/hands-on-github-actions/9781484264645/html/502534_1_En_8_Chapter.xhtml data-react-helmet=true><meta name=search-title content="8.&nbsp;Service Containers" data-react-helmet=true><meta property=og:title content="8.&nbsp;Service Containers" data-react-helmet=true><meta itemprop=name content="8.&nbsp;Service Containers" data-react-helmet=true><meta property=og:description itemprop=description content="©&nbsp;The Author(s), under exclusive license to APress Media, LLC, part of Springer Nature&nbsp;2021C. Chandrasekara, P. HerathHands-on GitHub Actionshttps://doi.org/10.1007/978-1-4842-6464-5_88.&nbsp;Service..." data-react-helmet=true><meta name=twitter:description content="©&nbsp;The Author(s), under exclusive license to APress Media, LLC, part of Springer Nature&nbsp;2021C. Chandrasekara, P. HerathHands-on GitHub Actionshttps://doi.org/10.1007/978-1-4842-6464-5_88.&nbsp;Service..." data-react-helmet=true><link rel="shortcut icon" href="data:image/vnd.microsoft.icon;base64,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
<body>
<noscript class=sf-hidden>
<iframe src='https://www.googletagmanager.com/ns.html?id=GTM-5P4V6Z'
height='0' width='0' style='display:none;visibility:hidden'></iframe>
</noscript>
<div id=root><div class=orm-ff-Shell-shell__wrapper><a href=#main class=orm-ff-Shell-skipLink>Skip to content</a><header class="orm-ff-Shell-sidebar orm-ff-Shell-collapsedSidebar"><div class=orm-ff-Navigation-collapsed__wrapper><div class=orm-ff-Logo-LogoWrapper data-testid=collapsed-logo><a href=https://learning.oreilly.com/><svg width=40 height=40 viewBox="0 0 40 40" fill=none xmlns=http://www.w3.org/2000/svg><circle cx=20 cy=20 r=18 fill=#D3002D></circle><mask id=mask0 mask-type=alpha maskUnits=userSpaceOnUse x=10 y=11 width=24 height=18><path fill-rule=evenodd clip-rule=evenodd d="M19.8774 11C16.2373 10.9999 12.9556 13.1926 11.5626 16.5556C10.1696 19.9185 10.9396 23.7895 13.5136 26.3634C15.1978 28.0566 17.4892 29.0059 19.8774 29C23.5176 29.0002 26.7994 26.8075 28.1924 23.4444C29.5855 20.0813 28.8153 16.2102 26.2412 13.6364C24.5569 11.9432 22.2655 10.9939 19.8774 11ZM25.5315 20.0001C25.5303 22.6961 23.6251 25.0158 20.9809 25.541C18.3366 26.0662 15.6895 24.6506 14.6582 22.1598C13.6268 19.6689 14.4983 16.7964 16.7398 15.2986C18.9813 13.8007 21.9687 14.0946 23.8754 16.0005C24.9393 17.0591 25.5357 18.4993 25.5315 20.0001ZM28.6361 12.4394C28.9972 11.5679 29.8478 10.9998 30.7911 11C32.0782 11.0016 33.1212 12.0445 33.1227 13.3316C33.1229 14.275 32.5548 15.1255 31.6833 15.4867C30.8118 15.8478 29.8086 15.6483 29.1415 14.9812C28.4745 14.3142 28.275 13.3109 28.6361 12.4394Z" fill=white></path></mask><g mask=url(#mask0)><path fill-rule=evenodd clip-rule=evenodd d="M10 8H34V32H10V8Z" fill=white></path></g></svg></a></div><div class="orm-ff-LogoView-root orm-ff-Navigation-logoView orm-ff-LogoView-collapsedNav"><div class="orm-ff-LogoView-container orm-ff-LogoView-collapsedNav"><div class="orm-ff-LogoView-logoWrapper orm-ff-LogoView-collapsedNav" data-testid=nav-logo><a href=https://learning.oreilly.com/ class="orm-Logo-logoWrapper orm-ff-LogoView-ormLogoWrapper orm-ff-LogoView-collapsedLogo"><span class="orm-Logo-root orm-ff-LogoView-ormLogoRoot orm-ff-LogoView-collapsedLogo orm-Logo-small">
<svg width=148 height=26 viewBox="0 0 148 26" xmlns=http://www.w3.org/2000/svg>
<g fill=#FFF fill-rule=evenodd>
<path d="M70.46 5.45V1.641H54.516v22.864h15.946v-3.812H58.337v-5.71h11.54v-3.81h-11.54V5.45h12.124M82.291 24.502V1.642h3.825v19.05h11.032v3.81H82.29M100.262 24.502V1.642h3.822v19.05h11.031v3.81h-14.853M74.475 24.502h3.818V1.638h-3.818zM6.773 7.446a8.09 8.09 0 0 0-2.38 5.73c0 2.242.91 4.25 2.38 5.723a8.085 8.085 0 0 0 5.745 2.379 8.074 8.074 0 0 0 5.746-2.38 8.036 8.036 0 0 0 2.377-5.723 8.074 8.074 0 0 0-2.377-5.73 8.114 8.114 0 0 0-5.746-2.362c-2.25 0-4.265.9-5.745 2.363M.57 13.176c0-6.579 5.347-11.902 11.947-11.909 6.6.007 11.948 5.33 11.948 11.909 0 6.577-5.348 11.908-11.948 11.908-6.6 0-11.947-5.33-11.947-11.909M36.284 11.17V5.45h7.705a2.868 2.868 0 0 1 2.866 2.86 2.875 2.875 0 0 1-2.866 2.86h-7.705zm9.62 3.527c2.761-.83 4.77-3.367 4.776-6.387a6.686 6.686 0 0 0-6.69-6.669H32.458v22.86h3.825v-9.519h5.331l5.762 9.52h4.461l-5.935-9.805zM29.752 4.075a2.81 2.81 0 0 1-2.814 2.805 2.808 2.808 0 0 1-2.814-2.804 2.81 2.81 0 0 1 2.814-2.808 2.813 2.813 0 0 1 2.814 2.808M132.163 1.641h-4.647l-5.886 8.49-5.885-8.49h-4.647l8.615 12.438v10.426h3.825V14.089l8.625-12.448M141.675 11.612c-2.791 0-5.048-2.255-5.048-5.027a5.043 5.043 0 0 1 5.048-5.041 5.049 5.049 0 0 1 5.045 5.04c0 2.773-2.267 5.028-5.045 5.028m0-11.017c-3.313 0-6.01 2.675-6.01 5.99 0 3.298 2.697 5.983 6.01 5.983 3.316 0 6.003-2.685 6.003-5.983a5.992 5.992 0 0 0-6.003-5.99"></path>
<path d="M140.224 4.498h2.364c.424 0 .76.345.763.77a.76.76 0 0 1-.763.754h-2.364V4.498zm4.148.77c0-.994-.8-1.79-1.784-1.79H139.2v6.11h1.024V7.049h1.709l1.229 2.538h1.138l-1.262-2.6a1.77 1.77 0 0 0 1.334-1.719z"></path>
</g>
</svg></span><span class=orm-Logo-logoTitle>O'Reilly</span></a></div></div></div><div class=orm-ff-Navigation-primaryNav__wrapper><div class=orm-ff-NavigationView-root><div class="orm-ff-NavigationView-container orm-ff-NavigationView-collapsedNav"><div class=orm-ff-NavigationView-headerMenu><div class=orm-ff-NavigationView-headerControls><nav aria-label=Primary><ul class=orm-ff-NavigationView-headerList data-testid=primaryHeaderMenuItems><li class=orm-ff-NavigationView-headerListItem><a href=https://learning.oreilly.com/home/ class="orm-Link-root orm-Link-hasIcon"><span class="orm-Icon-root orm-Link-icon orm-ff-NavigationView-linkIcon" aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-icon-home" aria-hidden=true></span><span class=orm-Icon-title>home</span></span>Home</a><li class=orm-ff-NavigationView-toggleControls><button aria-expanded=false class="orm-Button-root orm-ToggleLinks-root orm-Button-small"><span class="orm-Button-btnContentWrap orm-ToggleLinks-btnContentWrap"><span class=orm-ToggleLinks-iconContentWrap><span class="orm-Icon-root orm-ToggleLinks-extraIcon orm-ToggleLinks-showHideIcon" aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-icon-person" aria-hidden=true></span><span class=orm-Icon-title>person</span></span>Your O'Reilly</span><span class=orm-Icon-root aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-Button-icon orm-ToggleLinks-toggleIcon orm-icon-chevron-down" aria-hidden=true></span><span class=orm-Icon-title>chevron down</span></span></span></button><ul class=orm-ToggleLinks-toggleList><li class=orm-ff-NavigationView-toggleListItem><a href=https://learning.oreilly.com/profile/ class=orm-Link-root><span class=orm-ff-NavigationView-toggleListLabel>Profile</span></a><li class=orm-ff-NavigationView-toggleListItem><a href=https://learning.oreilly.com/history/ class=orm-Link-root><span class=orm-ff-NavigationView-toggleListLabel>History</span></a><li class=orm-ff-NavigationView-toggleListItem><a href=https://learning.oreilly.com/playlists/ class=orm-Link-root><span class=orm-ff-NavigationView-toggleListLabel>Playlists</span></a><li class=orm-ff-NavigationView-toggleListItem><a href=https://learning.oreilly.com/u/df548b90-632b-4f02-aeed-c8a0e13a6eb7/ class=orm-Link-root><span class=orm-ff-NavigationView-toggleListLabel>Highlights</span></a></ul><li class=orm-ff-NavigationView-headerListItem><a href=https://learning.oreilly.com/answers/ class="orm-Link-root orm-Link-hasIcon"><span class="orm-Icon-root orm-Link-icon orm-ff-NavigationView-linkIcon" aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-icon-answers" aria-hidden=true></span><span class=orm-Icon-title>answers</span></span>Answers</a><li class=orm-ff-NavigationView-toggleControls><button aria-expanded=false class="orm-Button-root orm-ToggleLinks-root orm-Button-small"><span class="orm-Button-btnContentWrap orm-ToggleLinks-btnContentWrap"><span class=orm-ToggleLinks-iconContentWrap><span class="orm-Icon-root orm-ToggleLinks-extraIcon orm-ToggleLinks-showHideIcon" aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-icon-queue" aria-hidden=true></span><span class=orm-Icon-title>queue</span></span>Explore</span><span class=orm-Icon-root aria-hidden=true style=height:1rem data-testid=icon><span style=font-size:1rem;width:1rem;height:1rem class="orm-Icon-icon orm-Button-icon orm-ToggleLinks-toggleIcon orm-icon-chevron-down" aria-hidden=true></span><span class=orm-Icon-title>chevron down</span></span></span></button><ul class=orm-ToggleLinks-toggleList><li class=orm-ff-NavigationView-toggleListItem><a href=https://learning.oreilly.com/topics/ class=orm-Link-root><span class=orm-ff-NavigationView-toggleListLabel>All Topics</span></a><li class=orm-ff-NavigationView-toggleListI
</span>You need to ensure that the service container is created and the ports are mapped to the host (the runner machine) to allow the workflow to directly communicate with a Redis service container.<div class=ProgramCode id=PC6><div class=LineGroup><div class=FixedLine>jobs:</div><div class=FixedLine>&nbsp;&nbsp;# Name of the job running in the runner directly</div><div class=FixedLine>&nbsp;&nbsp;runner-job:</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;# Must use a Linux environment to use service containers</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;runs-on: ubuntu-latest</div></div><div class=LineGroup><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;# Service containers running in the `runner-job`</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;services:</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# service container name</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redis:</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Docker Hub Redis docker image</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image: redis</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# health checks to wait until redis is ready</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options: &gt;-</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--health-cmd "redis-cli ping"</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--health-interval 10s</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--health-timeout 5s</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--health-retries 5</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ports:</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Mapping port 6379 on service container to the host (runner machine)</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# to enable the job to access the Redis service container</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 6379:6379</div></div></div></div><div class=Para id=Par22>Next, instead of using the Redis container service label (name), you must use a localhost mapped port to communicate with the Redis service container while running the JavaScript directly in the runner machine. Therefore, connection information to the Redis service container must be set up, as shown next.<div class=ProgramCode id=PC7><div class=LineGroup><div class=FixedLine>- name: Connect to Redis</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Runs JavaScript to create a Redis client, populate data and read data</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run: node redisclient.js</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Environment variable are passed to JavaScript to create Redis client</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env:</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# now need to access Redis service container via localhost as port is mapped to runner machine</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# and the job and Redis service container communication is no longer container to container</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REDIS_HOST: localhost</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The default Redis port is passed to create the Redis client</div><div class=FixedLine>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REDIS_PORT: 6379</div></div></div></div><div class=Para id=Par23>The following is the full workflow of using a Redis service container while running a job directly on a runner machine.<div class=ProgramCode id=PC8><div class=LineGroup><div class=FixedLine>on: [workflow_dispatch]</div></div><div class=LineGroup><div class=FixedLin