How to launch an app via Docker on every Pull Request? How to launch an app via Docker on every Pull Request? kubernetes kubernetes

How to launch an app via Docker on every Pull Request?


There is a jenkins plugin github-pullrequest can resolve your problem.

Prerequisites:

  1. You have a jenkins server can access by internet if you want trigger your build by a webhook.
  2. Your have a github API token to access/admin your git repository, it can be generate by yourself in settings.

Please follow the guide configuration to setup your jenkins integration with github.

After configuration:

  • you can trigger your build by PR events: opened/commit changed/closed, or comment with specific pattern.
  • you can get a PR status via environment variable ${GITHUB_PR_STATE}, so you can start or stop a container on specific value.
  • you can publish a comment to a PR to tell the address of your web service after you started docker container.

About expose port of cotainer with multi PR, your can just run container with -p 3000, it will auto expose a port in a range on the docker host, docker port <container> will show the specific port number, so for example:

  • container1 with address <host>:32667 for PR1
  • container2 with address <host>:35989 for PR2


I think the simplest solution to this would be to create two different Jenkins Jobs, one which deploys and the other which nukes it. The trigger for this can be set 2 webhooks in GitHub one for PR create and one for PR resolve.


As Sylvain GIROD pointed out:

With only one box to run the application you need to change the port that is exposed. When a GitHub PR happens you deploy your application (docker run -p newport:containerport). If you are deploying services you change the target port.

Then you send the link with this port back to the user (email?).

Additionally you need some key-value store to remember which pod was created for which users so that you can decide on a new PR whether to destroy the old containers.

I would also suggest giving the services a time to live and regularly cleaning up stale containers/services.