{"id":177,"date":"2020-12-15T00:59:46","date_gmt":"2020-12-14T13:59:46","guid":{"rendered":"https:\/\/studios.nomoss.co\/blog\/?p=177"},"modified":"2023-12-12T16:36:05","modified_gmt":"2023-12-12T05:36:05","slug":"continuous-deployment-for-unity-webgl-games","status":"publish","type":"post","link":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/","title":{"rendered":"Continuous Deployment for Unity WebGL Games"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><em>A recipe for success<\/em><\/h3>\n\n\n\n<p><a href=\"https:\/\/noblesteedgames.com\/blog\/production-unity-webgl-the-basics\/\">Last time, we discussed the basics<\/a> of how to ensure that Unity WebGL can run in a production environment, and now it&#8217;s time to dive further into that topic. Today, we&#8217;ll be going step-by-step on how to set up continuous deployment for a Unity WebGL production build.<\/p>\n\n\n\n<p><em>When I was younger, I used to visit my grandmother&#8217;s house, and she would always have deliciously efficient continuous deployment pipelines put out for all the children to enjoy. Now that I have a business of my own, I&#8217;ve started making continuous deployments for them to carry on the tradition. This one&#8217;s for you, gam gam.<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What is Continuous Deployment?<\/h4>\n\n\n\n<p>Continuous deployment is a phrase used in software development that refers to the concept of streamlining releases of software. The better the continuous deployment of a system, the easier it is to get a change that has been made to the code live to the hands of the users.<\/p>\n\n\n\n<p>There are a number of benefits to setting up a streamlined continuous deployment system. One is that it just makes things easier. Spending less energy deploying your application will pay off in the long run. It also means you can schedule deployments for random times (e.g. late at night when there aren&#8217;t a lot of users online), and you won&#8217;t need to have a large team there to watch over the deployment. Also, it allows you to very easily have multiple environments running in parallel. For 22d2, the project we&#8217;ll be using as an example, we have a development and a production environment, and our continuous deployment pipeline means that those two environments will keep themselves up to date, without much oversight.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Ingredients<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-10.png\" alt=\"Graph showing the stages of Continuous Deployment in 22d2\" class=\"wp-image-185\" width=\"466\" height=\"303\"\/><figcaption class=\"wp-element-caption\">Continuous Deployment in a nutshell, for 22d2<\/figcaption><\/figure><\/div>\n\n\n<p>In the image to the left, you can see an image outlining the process we&#8217;re about to set up. In brief, we will push some changes to code in our client repository. Then, Unity Cloud Build will automatically make a WebGL build from those changes. That build will then get pushed to our server repository, which will then be automatically deployed to our server. With that brief understanding in mind, let&#8217;s break down each component.<\/p>\n\n\n\n<p>Firstly, lets talk repositories. If you&#8217;re running a Unity WebGL client and a backend server, as we will for this example, you&#8217;ll need to have two repositories. You should have your client repository, which is a fairly standard Unity repository. You should also have your server repository, which manages and houses all your server code.<\/p>\n\n\n\n<p>You&#8217;ll also need an automated build system. We use Unity Cloud Build, so that&#8217;s the example we&#8217;ll be going with. Unity Cloud Build is a service that Unity offers, which allows you to automatically create builds in the cloud. E.g. &#8211; no more long wait times while a build is created on your computer.<\/p>\n\n\n\n<p>The second thing you&#8217;ll need is a server somewhere that is hosting your Unity WebGL build. We talked about this a little in <a href=\"https:\/\/noblesteedgames.com\/blog\/production-unity-webgl-the-basics\/\">our previous article<\/a>. We use a Sails server, which is running on an AWS ecosystem (ec2 and rds).<\/p>\n\n\n\n<p>Finally, you&#8217;ll need a version control host which allows you to perform automated deployments. We use Gitlab for all of our repositories, but Github has similar functionality, so you should be able to get it working there too.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Step One &#8211; Unity Cloud Build<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"376\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-3.png\" alt=\"Image showing the configuration settings for Continuous Deployment in Unity Cloud Build\" class=\"wp-image-178\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-3.png 516w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-3-300x219.png 300w\" sizes=\"(max-width: 516px) 100vw, 516px\" \/><figcaption class=\"wp-element-caption\">The WebGL target for 22d2<\/figcaption><\/figure><\/div>\n\n\n<p>Before starting this recipe, ensure that you&#8217;ve configured your Unity Cloud Build to automatically create your WebGL builds. You probably want them to be automatically built when there is a new change to your main branch, at least if you&#8217;re running a development environment, like we are.<\/p>\n\n\n\n<p>Next, you&#8217;ll need to configure your Unity Cloud Build to automatically push the build it creates to your server repository. When UCB has finished making a WebGL build, we want it to automatically send that build to our server repository, so our server can deploy that build.<\/p>\n\n\n\n<p>In order to do this, we&#8217;ll be taking advantage of post-build scripts. Unity Cloud Build lets you write a simple shell script to run after you&#8217;ve completed a build. <a href=\"https:\/\/pastebin.pl\/view\/17d90826\" target=\"_blank\" rel=\"noreferrer noopener\">Here is ours<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"511\" height=\"277\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-4.png\" alt=\"Continuous Deployment shell script, connected with UCB post-build script\" class=\"wp-image-179\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-4.png 511w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-4-300x163.png 300w\" sizes=\"(max-width: 511px) 100vw, 511px\" \/><figcaption class=\"wp-element-caption\">The Continuous Deployment shell script for UCB<\/figcaption><\/figure><\/div>\n\n\n<p>We wrote that script, and put it in a <code>scripts<\/code> folder in the root folder for our repository. Then, in UCB, in the advanced options for our WebGL target, we pointed it to that script.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-5.png\" alt=\"Environment variables configuration\" class=\"wp-image-180\" width=\"508\" height=\"232\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-5.png 507w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-5-300x137.png 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/><figcaption class=\"wp-element-caption\">Keep your environment<br>variables secure!<\/figcaption><\/figure><\/div>\n\n\n<p>If you take a <a href=\"https:\/\/pastebin.pl\/view\/17d90826\" target=\"_blank\" rel=\"noreferrer noopener\">look at the shell script<\/a>, you&#8217;ll notice it has a few variables. These are things like secret keys, which we don&#8217;t want to be visible in our repository. Luckily &#8211; Unity Cloud Build lets us set these up in the target. These should be fairly self-explanatory, you want them to fill in the command to clone your repository.<\/p>\n\n\n\n<p>Once you&#8217;ve done the above steps, you should be able to set your UCB to create a build, and after it&#8217;s done you&#8217;ll notice that it has pushed to your server repository. Here&#8217;s what that looks like:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-6.png\" alt=\"Graph of commits. Each Unity Cloud Build WebGL commit is a continuous deployment commit\" class=\"wp-image-181\" width=\"820\" height=\"295\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-6.png 783w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-6-600x216.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-6-300x108.png 300w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-6-768x277.png 768w\" sizes=\"(max-width: 820px) 100vw, 820px\" \/><figcaption class=\"wp-element-caption\">Each of the &#8216;Unity Cloud Build WebGL&#8217; commits is a continuous deployment commit<\/figcaption><\/figure><\/div>\n\n\n<h4 class=\"wp-block-heading\">Step Two &#8211; The Pipeline<\/h4>\n\n\n\n<p>The second thing to do is to configure the other half of your continuous deployment. We&#8217;re already automatically creating and pushing our builds, but we need to get those on to the server, too.<\/p>\n\n\n\n<p>Firstly, you&#8217;ll need to set up a script that you can call to update your server deployment. Again, <a href=\"https:\/\/pastebin.pl\/view\/19672dde\" target=\"_blank\" rel=\"noreferrer noopener\">here&#8217;s ours<\/a>. This script can be called to stop, update and restart your server with the latest version of your code. Give this script a test to ensure it works, and your application updates.<\/p>\n\n\n\n<p>Next, we&#8217;ll configure your version control host to automatically run this script when there is a change to the appropriate branch. Again, we use Gitlab for this, but other hosts should have similar functionality.<\/p>\n\n\n\n<p>In the root directory server repository, you&#8217;ll want to create a file called <code>.gitlab-ci.yml<\/code>. This is a yaml file which contains instructions for gitlab to process about what to do when there is a deployment. <a href=\"https:\/\/pastebin.pl\/view\/c4130659\" target=\"_blank\" rel=\"noreferrer noopener\">Here&#8217;s ours<\/a>. You&#8217;ll notice that it has a few different sections. It defines a command to run to perform automated tests, before defining the process to deploy to either development or production. Due to this, gitlab will first perform the tests, and then if they are successful, deploy to the correct environment, depending on the branch that was updated. In our example, the <code>master<\/code> branch automatically deploys to our development server, and the <code>release\/production<\/code> branch automatically deploys to our production server.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"418\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8-1024x418.png\" alt=\"Continuous deployment pipeline status indicators in Gitlab\" class=\"wp-image-183\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8-1024x418.png 1024w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8-600x245.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8-300x122.png 300w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8-768x313.png 768w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-8.png 1306w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Our CD pipeline in action<\/figcaption><\/figure><\/div>\n\n\n<p>Once you push your repository with this file in it, Gitlab will automatically process it and run your pipeline. You&#8217;ll start to see something like the image below, with your pipelines passing or failing respectively.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"423\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-9.png\" alt=\"Configuration for continuous deployment variables in GitLab\" class=\"wp-image-184\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-9.png 968w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-9-600x262.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-9-300x131.png 300w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2020\/12\/image-9-768x336.png 768w\" sizes=\"(max-width: 968px) 100vw, 968px\" \/><figcaption class=\"wp-element-caption\">Secure them variables!<\/figcaption><\/figure><\/div>\n\n\n<p>It will fail at first, because similar to with the UCB script, you&#8217;ll need to set your SSH key, a secure variable that you don&#8217;t want exposed in your repository. You can find the variable settings in Gitlab under <code>Settings<\/code> &gt; <code>CI \/ CD<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">A Few Final Thoughts<\/h4>\n\n\n\n<p>Now that you&#8217;ve set up your continuous deployment, hopefully you find how much time it saves you was worth the effort. If any parts of the above article were too confusing, feel free to chuck a comment below and I&#8217;ll happily help you debug.<\/p>\n\n\n\n<p>Processes like this are sometimes a fair amount of work to set up, but almost always they end up being worth it in the long run.<\/p>\n\n\n\n<p>We hope you enjoyed reading this! Have a question or want to chat more about game development?&nbsp;<a href=\"mailto:hello@noblesteed.games\" data-type=\"mailto\" data-id=\"mailto:hello@noblesteed.games\"><strong>Reach out to us!<\/strong><\/a><\/p>\n\n\n\n<p>Other places you can find us:<\/p>\n\n\n\n<ul>\n<li>Our other&nbsp;<a href=\"https:\/\/noblesteedgames.com\/blog\/category\/gamedev-resources\/\">game development resources<\/a><\/li>\n\n\n\n<li>Join our<a href=\"https:\/\/discord.com\/invite\/Ka8suskKcs\">&nbsp;Discord serve<\/a>r<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!<\/p>\n","protected":false},"author":1,"featured_media":646,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[48,40],"tags":[17,5,6],"ppma_author":[65],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Continuous Deployment for Unity WebGL Games | Dev Blog<\/title>\n<meta name=\"description\" content=\"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Continuous Deployment for Unity WebGL Games | Dev Blog\" \/>\n<meta property=\"og:description\" content=\"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\" \/>\n<meta property=\"og:site_name\" content=\"Noble Steed Games\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/NobleSteedAU\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-14T13:59:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-12T05:36:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Reuben\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NobleSteedAU\" \/>\n<meta name=\"twitter:site\" content=\"@NobleSteedAU\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Reuben\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\"},\"author\":{\"name\":\"Reuben\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9\"},\"headline\":\"Continuous Deployment for Unity WebGL Games\",\"datePublished\":\"2020-12-14T13:59:46+00:00\",\"dateModified\":\"2023-12-12T05:36:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\"},\"wordCount\":1251,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg\",\"keywords\":[\"Continuous Deployment\",\"Production WebGL\",\"Unity\"],\"articleSection\":[\"E-Books &amp; Downloadable Resources\",\"Gamedev Resources\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\",\"name\":\"Continuous Deployment for Unity WebGL Games | Dev Blog\",\"isPartOf\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg\",\"datePublished\":\"2020-12-14T13:59:46+00:00\",\"dateModified\":\"2023-12-12T05:36:05+00:00\",\"description\":\"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!\",\"breadcrumb\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg\",\"width\":900,\"height\":378,\"caption\":\"Screenshot of the Unity WebGL flowchart.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/noblesteedgames.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Continuous Deployment for Unity WebGL Games\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#website\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/\",\"name\":\"Noble Steed Games\",\"description\":\"Stories from Development\",\"publisher\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/noblesteedgames.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\",\"name\":\"Noble Steed Games\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg\",\"width\":1374,\"height\":1374,\"caption\":\"Noble Steed Games\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/NobleSteedAU\",\"https:\/\/x.com\/NobleSteedAU\",\"https:\/\/www.instagram.com\/noblesteedau\/\",\"https:\/\/www.linkedin.com\/company\/18263569\/\",\"https:\/\/www.youtube.com\/channel\/UC-CE2Op8dEH0LET0t9Zw79g\",\"https:\/\/twitter.com\/NobleSteedAU\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9\",\"name\":\"Reuben\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/image\/b281395bed28c3024dda9576a32f5794\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg\",\"caption\":\"Reuben\"},\"sameAs\":[\"https:\/\/noblesteedgames.com\/blog\/\"],\"url\":\"https:\/\/noblesteedgames.com\/blog\/author\/studios-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Continuous Deployment for Unity WebGL Games | Dev Blog","description":"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/","og_locale":"en_US","og_type":"article","og_title":"Continuous Deployment for Unity WebGL Games | Dev Blog","og_description":"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!","og_url":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/","og_site_name":"Noble Steed Games","article_publisher":"https:\/\/www.facebook.com\/NobleSteedAU","article_published_time":"2020-12-14T13:59:46+00:00","article_modified_time":"2023-12-12T05:36:05+00:00","og_image":[{"width":900,"height":378,"url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg","type":"image\/jpeg"}],"author":"Reuben","twitter_card":"summary_large_image","twitter_creator":"@NobleSteedAU","twitter_site":"@NobleSteedAU","twitter_misc":{"Written by":"Reuben","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#article","isPartOf":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/"},"author":{"name":"Reuben","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9"},"headline":"Continuous Deployment for Unity WebGL Games","datePublished":"2020-12-14T13:59:46+00:00","dateModified":"2023-12-12T05:36:05+00:00","mainEntityOfPage":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/"},"wordCount":1251,"commentCount":0,"publisher":{"@id":"https:\/\/noblesteedgames.com\/blog\/#organization"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage"},"thumbnailUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg","keywords":["Continuous Deployment","Production WebGL","Unity"],"articleSection":["E-Books &amp; Downloadable Resources","Gamedev Resources"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/","url":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/","name":"Continuous Deployment for Unity WebGL Games | Dev Blog","isPartOf":{"@id":"https:\/\/noblesteedgames.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage"},"thumbnailUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg","datePublished":"2020-12-14T13:59:46+00:00","dateModified":"2023-12-12T05:36:05+00:00","description":"An in depth step-by-step guide on how to set up continuous deployment for a Unity WebGL production build, with code samples!","breadcrumb":{"@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#primaryimage","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/Webgl.jpg","width":900,"height":378,"caption":"Screenshot of the Unity WebGL flowchart."},{"@type":"BreadcrumbList","@id":"https:\/\/noblesteedgames.com\/blog\/continuous-deployment-for-unity-webgl-games\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/noblesteedgames.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Continuous Deployment for Unity WebGL Games"}]},{"@type":"WebSite","@id":"https:\/\/noblesteedgames.com\/blog\/#website","url":"https:\/\/noblesteedgames.com\/blog\/","name":"Noble Steed Games","description":"Stories from Development","publisher":{"@id":"https:\/\/noblesteedgames.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/noblesteedgames.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/noblesteedgames.com\/blog\/#organization","name":"Noble Steed Games","url":"https:\/\/noblesteedgames.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg","width":1374,"height":1374,"caption":"Noble Steed Games"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/NobleSteedAU","https:\/\/x.com\/NobleSteedAU","https:\/\/www.instagram.com\/noblesteedau\/","https:\/\/www.linkedin.com\/company\/18263569\/","https:\/\/www.youtube.com\/channel\/UC-CE2Op8dEH0LET0t9Zw79g","https:\/\/twitter.com\/NobleSteedAU"]},{"@type":"Person","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9","name":"Reuben","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/image\/b281395bed28c3024dda9576a32f5794","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","caption":"Reuben"},"sameAs":["https:\/\/noblesteedgames.com\/blog\/"],"url":"https:\/\/noblesteedgames.com\/blog\/author\/studios-admin\/"}]}},"authors":[{"term_id":65,"user_id":1,"is_guest":0,"slug":"studios-admin","display_name":"Reuben","avatar_url":{"url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","url2x":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg"},"user_url":"https:\/\/noblesteedgames.com\/blog\/","last_name":"Moorhouse","first_name":"Reuben","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/177"}],"collection":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/comments?post=177"}],"version-history":[{"count":5,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":1213,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions\/1213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/media\/646"}],"wp:attachment":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/tags?post=177"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}