Streamlining Web Application Deployment with GitLab Runner and IIS

Introduction

Deploying a web application efficiently and securely is crucial for maintaining uptime and reliability. In this blog post, we’ll explore an automated deployment strategy using a self-hosted GitLab Runner with IIS, ensuring a smooth and structured deployment process.

Why Automate Deployment?

Manual deployments can be error-prone and time-consuming. Automating the deployment process with GitLab Runner ensures:

  • Consistency in deployments
  • Reduced downtime
  • Efficient backup and rollback strategies
  • Streamlined workflow for developers

The Deployment Workflow

1. Build the Application

Before deployment, the developer compiles the application and generates the necessary build files.

2. Copy Files to Deployment Folder

The compiled files are placed in the www folder, which serves as the source for deployment.

3. Trigger GitLab Deployment Job

A simple execution of git_push.bat pushes the latest build to the GitLab repository, initiating the automated deployment process.

4. GitLab Runner Execution

The self-hosted GitLab Runner detects the push and begins the deployment job.

5. Stop IIS Services

To avoid conflicts, the GitLab Runner stops the IIS website and IIS application pool before proceeding with file replacements.

6. Backup Important Files

Critical configuration files, such as appsettings.json and the private folder, are backed up in a bkp directory to ensure data safety.

7. Remove Old Files

To maintain a clean deployment environment, all existing files, except those in the bkp folder, are removed from the deployment directory.

8. Deploy New Files

The freshly compiled files from the GitLab Runner source are copied into the designated deployment location.

9. Restart IIS Services

After deployment, the IIS website and IIS application pool are restarted, making the new version live.

10. Complete Deployment

With the GitLab Runner completing the process, the IIS-hosted web application is now updated and running with the latest version.

Best Practices for a Smooth Deployment

  • Maintain a dedicated backup folder: Ensure that the bkp folder is always available to safeguard important files.
  • Monitor logs: Regularly check GitLab Runner logs for any errors or warnings.
  • Verify IIS services: After deployment, validate that IIS is running correctly to avoid downtime.
  • Test before deploying: Run tests on a staging environment to prevent issues in production.

Troubleshooting Deployment Issues

  • Deployment failure:
    • Review the GitLab Runner logs for error messages.
    • Verify IIS permissions and configurations.
    • Confirm that backup files are correctly restored.
  • Website not starting after deployment:
    • Restart the IIS application pool manually.
    • Check application logs for missing dependencies or errors.

Conclusion

Automating deployment with GitLab Runner and IIS significantly improves efficiency, minimizes downtime, and enhances overall application stability. By following this structured approach, development teams can ensure seamless and reliable updates to their web applications.

For any issues or further improvements, reach out to the development team. Happy deploying!

Complete code reference can be found in:
koolkabin/gitlab-iis-pipeline: Gitlab ci/cd pipeline with self hosted gitlab runner to deployment websites in windows server with iis