Skip to content

Docker build has to be specific to each environment - Unecessary complexity #895

@franck-boullier

Description

@franck-boullier

Context:

For the Unee-T frontend to work, we can describe the things we need as such:

  • A: Docker image that has everything we need to run the MEFE code C.
  • B: Infrastructure that we need to run the MEFE code C on the Docker image A.
  • C: MEFE Code so that user can create and manage cases.

In order to deploy some of the Unee-T components (frontend but also bugzilla-customization) We need to:

  • Step 1: Define the Docker image A that is able to run the MEFE code
  • Step 2: Test the existing MEFE code C on that new image A to make sure that the existing MEFE code C still works as intended.
  • Step 3: Build the valid image A on the chosen AWS infrastructure B.
  • Step 4: Deploy the MEFE code C on the chosen AWS infrastructure.

Other things to Keep in mind:

  • Unee-T can be, and is, deployed in several different installations (Unee-T, Unee-T INS, etc...)
  • ALL installations and all environments in each installation (DEV, PROD, DEMO) should share the same Docker Image A.
    That same share Docker image A should then be used and deployed on each Infrastructure B-DEV, B- DEMO, B-PROD for each installation (Unee-T, Unee-T INS, etc...).
  • Some installation WILL make changes in the MEFE code C (turn off some functionalities, edit some of the UI, etc...). Most of these change will NOT require a change of the Docker image A or changes in the infrastructure B that they use to run the application.
  • Changes in the Docker image A are happening much slower than changes in the MEFE code C.
  • Changes in the MEFE code C are happening frequently.

The problem:

In the current version of the master, we have fused the creation and test of the Docker image A with the creation and test of the MEFE code C.

Some of the consequences of the problem:

Each installation/Environment has its own custom Docker Image A:

This is not necessary: each Unee-T installation (Unee-T, Unee-T INS, etc...) should share the same docker image frontend-docker-image as they are sharing some of the other Unee-T libraries (ex: unee-t/env)

We do many unnecessary steps each time we change the MEFE Code C:

Today, each time we do a minor change in the MEFE code C we are:

  • Step 1: Re-creating a brand new Docker image A
  • Step 2: Re-deploying that Docker image A on our infrastructure B
  • Step 3: Updating the MEFE code C

In the vast majority of the cases, we do NOT need to do Step 1 and 2.

It should be possible to

  • Changes the MEFE code C to add/remove functionalities or do minor cosmetic changes
  • Still use the same Docker image A.
  • Update the code that is running on Infrastructure B instead of rebuilding everything.

Maintenance of the Docker image is problematic:

Because each environment (DEV, PROD, DEMO) in each installation is building its own Docker image A, it is complex to centrally:

  • Do some upgrades in the components and dependencies in docker image A (Maintain the Docker image).
  • Test these changes and make sure the current version of the MEFE code C still works as intended.

Possible solution:

We can/should create a specific repo frontend-docker-image dedicated to maintaining the Docker Image A.
We can then use that repo frontend-docker-image as a single central component that can be shared by all the forks of the MEFE Code C (Unee-T, Unee-T INS, etc...).

@kaihendry do you have a better solution that will solve all the issues that have been listed here?

Metadata

Metadata

Assignees

Labels

Refactoringcomplexshould take 2 days to fixenhancementproductionThis is an issue that affects the production environment.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions