Skip to main content

Command Palette

Search for a command to run...

How to use GitHub Actions to deploy code in Window Virtual Machine

Deploy source code to IIS via GitHub Action in Virtual Machine

Published
3 min read
How to use GitHub Actions to deploy code in Window Virtual Machine
R

Full-stack DevOps Specialist C# .NET, ASP.NET MVC/CORE, EF/CORE/Dapper, MSSQL/PostgreSQL/MySQL, Front-end JavaScript/TypeScript/Angular/React/Vue, backend development. WCF, REST Web API, Web Services, Azure, VSTS GIT, Jira, CI, debugging, troubleshooting. Got an idea 💡 to build a new product or are you planning to launch 🚀 your new app? Are you tired of waiting ⏳ on slow and non-productive programmers? You have come to the right place! I provide the best value for your money 💲💲💲!

If you are using GitHub to manage your source code, you can use GitHub self-hosted runners to automate. In this article, I will share how to deploy the website to IIS so we can set up auto deployment for any private virtual machine or virtual private server. It's pretty easy. Let's start.

Steps

  • Open Project repository in GitHub
  • Go to the Settings tab

image.png

  • Click on the Runners menu from the Action menu. so we can set up the self-hosted runner.

image.png

  • Click on the New self-hosted runner button, Which will open another page

image.png

  • Select Windows operating system and appropriate Architecture from below dropdown

image.png

  • Now time to open Virtual Machine, Go to your Window Virtual Machine and open PowerShell and go to the root directory in C: drive, and follow the commands displayed on your current GitHub page step by step.

image.png

  • It will create actions-runner folder in C: drive
  • While executing it may ask to set "Label", Which will be required later on. so please set it. Later on, it will display on the GitHub Runners page.

Note: If you setting up multiple hosted runners then you need to set unique folder each time

  • After completing the step, reload the page and you will get a runner as "Idle". that means we are ready for the next step

image.png

  • Now open the “Actions” tab and create a new workflow here is the sample code for the .yml file (You need to change env variables only if you are using for .NET for another tech you need to change in the build step also)

https://gist.github.com/rohit-patel/4f6f18012dbd07cf9088c4e5e2522db0

name: "Build and Deploy - Self Hosted"

on:
  workflow_dispatch:
    branches:
      - master

env:
  GITHUB_WORKING_DIRECTORY: 'IISAutoDeploy'             # If you have a root folder in the GitHub code set otherwise leave it blank
  IIS_WEBAPP_PATH: 'C:\HostingSpaces\admin\AutoDeployTest'   # Web App Path from Virtual Machine         
  DOTNET_VERSION: '5.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: self-hosted 

    steps:
      - uses: actions/checkout@v2

      - name: Setup .NET Core 
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Install dependencies
        working-directory: ${{ env.GITHUB_WORKING_DIRECTORY }}
        run: dotnet restore

      - name: Build
        working-directory: ${{ env.GITHUB_WORKING_DIRECTORY }}
        run: dotnet build --configuration Release --no-restore 

      - name: Publish
        working-directory: ${{ env.GITHUB_WORKING_DIRECTORY }}
        run: dotnet publish --configuration Release --output 'dotnetcorewebapp'

      - name: Upload a Build Artifact
        uses: actions/upload-artifact@v2.2.1
        with:
          name: application
          path: '${{ env.GITHUB_WORKING_DIRECTORY }}/dotnetcorewebapp'

  deploy:
    needs: build
    runs-on: self-hosted

    steps:
    - name: Take application offline
      run: New-Item -Type File -Name app_offline.htm -Path ${{ env.IIS_WEBAPP_PATH }} -Force

    - name: Set Offline HTML file
      run: Set-Content ${{ env.IIS_WEBAPP_PATH }}\app_offline.htm 'Site Under Maintenance'

    - name: Download new binaries over the top of the app
      uses: actions/download-artifact@v2
      with:
        name: application
        path: ${{ env.IIS_WEBAPP_PATH }}

    - name: Bring the app back online
      run: Remove-Item ${{ env.IIS_WEBAPP_PATH }}\app_offline.htm
  • Now the setup is done. You can run GitHub Action Manually from the Actions tab from GitHub. If you want to set up based on the trigger like on push or on pull request merge please refer to the below link. It is quite easy.

https://michaelcurrin.github.io/dev-cheatsheets/cheatsheets/ci-cd/github-actions/triggers.html

More from this blog

W

Web Development Blogs | RN Technolab

2 posts

Having 8+ years of experience in design, development, deployment. Experience in developing Software applications using C#, .NET Core, React.js, Vue.js, Node.js