Refactor Pipeline's Services Code
services:
- name: $DEVELOPMENT_CONTAINER_IMAGE
alias: frontend
command: ["scripts/start_app.sh"]
- name: registry.gitlab.com/starting-spark/porter/backend/master:development
alias: backend
command: ["scripts/start_app.sh"]
- name: registry.gitlab.com/starting-spark/porter/backend/master:development
alias: backend-setup
command: ["scripts/setup_app.sh"]
- name: postgres:13.0
alias: database
can be made to look like this:
services:
- !reference [.frontend_service, services]
- !reference [.backend_service, services]
- !reference [.backend_database_service, services]
Using these templates (making use of services
's variables
key: https://docs.gitlab.com/ee/ci/services/#available-settings-for-services):
.frontend_base:
&frontend_base
variables: &frontend_variables_base
VITE_BACKEND_SCHEME: http
VITE_BACKEND_HOST: backend
VITE_BACKEND_PORT: 5000
VITE_BACKEND_PATH_PREFIX: ''
.backend_base:
&backend_base
variables: &backend_variables_base
CORE_PORT: "5000"
BASE_PATH: ''
ALLOWED_HOSTS: http://localhost:5173,
DATABASE_HOSTS: backend-database:5432
.backend_database_base:
&backend_database_base
variables: &backend_database_variables_base
POSTGRES_DB: backend_pipeline
POSTGRES_USER: backend_app
POSTGRES_PASSWORD: password
.frontend_service:
services:
- name: $DEVELOPMENT_CONTAINER_IMAGE
alias: frontend
command: ["scripts/start_app.sh"]
variables:
<<: *frontend_variables_base
.backend_service:
services:
- name: $BACKEND_DEVELOPMENT_CONTAINER_IMAGE
alias: backend
command: ["scripts/start_app.sh"]
variables:
<<: *backend_variables_base
<<: *backend_database_variables_base
variables:
.backend_setup_service:
services:
- name: $BACKEND_DEVELOPMENT_CONTAINER_IMAGE
alias: backend-setup
command: ["scripts/setup_app.sh"]
variables:
<<: *backend_variables_base
<<: *backend_database_variables_base
.backend_database_service:
services:
- name: postgres:14.2
alias: backend-database
variables:
<<: *backend_database_variables_base
It will be interesting if services.variables
can be DRY'd up using !reference
(e.g. POSTGRES_DB: !reference [.backend_database_service, services, "[0]", variables, POSTGRES_DB]
) instead of using YAML alias and anchors.
Additional code example for reference:
.frontend_service:
services:
- name: $DEVELOPMENT_CONTAINER_IMAGE
alias: frontend
command: ["scripts/start_app.sh"]
.backend_service:
services:
- name: $BACKEND_DEVELOPMENT_CONTAINER_IMAGE
alias: backend
command: ["scripts/start_app.sh"]
variables:
BASE_PATH: ''
ALLOWED_HOSTS: http://localhost:5173,
.backend_database_service:
services:
- name: postgres:14.2
alias: backend-database
variables:
BACKEND_DATABASE_HOSTS: backend-database:5432
POSTGRES_DB: backend_pipeline
POSTGRES_USER: backend_app
POSTGRES_PASSWORD: password
Edited by Zhao Li