GitLab CI/CD is a pretty big part of my deployment strategy with the React websites that I build. My current engagement has me pushing to a Windows IIS server via GitLab’s continuous integration/deployment, so I wanted to post an example of the YAML file that makes it all happen. Without going into the in’s and outs of how GitLab CI/CD works, here’s an example of my GitLab YAML template that I use for React websites on IIS servers.
There are a couple prerequisites that need to be in place if you’re going to use this file:
- Starting off this build server is a windows machine, any other set up requires a few updates.
- The build server needs to have NPM, NodeJS and MS Web Deploy V3 installed. Install MS Web Deploy on the build and web server.
- $CI_USERNAME and $CI_PASSWORD are GitLab secrets. CI_USERNAME should have access to the IIS server.
- The IIS website is set up for Basic Authentication permissions.
That’s it. Let me know if you run into any issues or have questions.
stages: - build - deploy before_script: - echo BEGINNING #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ #---------------------------- # Build Website Pieces #---------------------------- build_web_production: stage: build script: - $Env:Path += ";C:\Program Files\nodejs" - npm install - npm run build only: - main artifacts: paths: - "$CI_PROJECT_DIR/build" environment: name: production url: http://example.com tags: - shell #---------------------------- # End Build Website Pieces #---------------------------- #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ #---------------------------- # Deploy Website Pieces #---------------------------- deploy_web_production: stage: deploy only: - main script: - $Env:Path += ";C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\" - msdeploy -verb:sync -source:contentPath="$CI_PROJECT_DIR/build" -dest:contentPath="IIS_WEBSITE_NAME",ComputerName="https://IISSERVER:8172/msdeploy.axd?site=IIS_WEBSITE_NAME",UserName=$CI_USERNAME,Password=$CI_PASSWORD,IncludeAcls='False',AuthType='Basic' -skip:objectName=filePath,absolutePath=.\*web\.config -enableRule:AppOffline -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -allowUntrusted -userAgent="VSCmdLine:WTE1.0.0.0" dependencies: - build_web_production environment: name: test url: https://example.com artifacts: paths: - "$CI_PROJECT_DIR/build" tags: - shell