Skip to content
Snippets Groups Projects
Commit d33fe9ea authored by Alen Zubic's avatar Alen Zubic
Browse files

Merge branch 'multi-stage-build-and-push' into 'main'

feat: Docker multi-stage build and CI/CD push

See merge request !36
parents 5625d47d 56e0cae8
No related branches found
No related tags found
1 merge request!36feat: Docker multi-stage build and CI/CD push
Pipeline #126738 passed
stages:
- prepare
- test
- build
- dockerize
- deploy
default:
image: nikolaik/python-nodejs:python3.11-nodejs19-alpine
cache: &cache
key:
files:
- pnpm-lock.yaml
paths:
- .pnpm-store
- ./node_modules/
- ./apps/web/node_modules/
- ./libs/shared/node_modules/
policy: pull
before_script:
- npm i -g pnpm
- pnpm config set store-dir .pnpm-store
- apk add --no-cache --virtual .build-deps build-base g++ cairo-dev jpeg-dev pango-dev giflib-dev
- apk add --no-cache --virtual .runtime-deps cairo jpeg pango giflib
install:js:
stage: prepare
interruptible: true
cache:
<<: *cache
policy: push
script:
- pnpm install
# only:
# changes:
# - pnpm-lock.yaml
# - .gitlab-ci.yml
# - apps/**/*
# - libs/**/*
# refs:
# - main
# - merge_requests
.distributed:
interruptible: true
cache:
<<: *cache
before_script:
- npm i -g pnpm
- apk add --update git
artifacts:
paths:
- .pnpm-store
rules:
# - if: $CI_COMMIT_BRANCH == "main"
# - if: $CI_COMMIT_BRANCH == "merge_requests"
- changes:
- apps/**/*
- libs/**/*
- .gitlab-ci.yml
lint:
stage: test
extends: .distributed
script:
- pnpm lint
test:
stage: test
extends: .distributed
script:
- pnpm test
build-prod:
stage: build
extends: .distributed
rules:
# - if: $CI_COMMIT_BRANCH == "main"
- changes:
- apps/**/*
- libs/**/*
- .gitlab-ci.yml
artifacts:
paths:
- .pnpm-store
- dist/apps/web
script:
- pnpm build
build-docker:
image: docker:latest
services:
- name: docker:dind
alias: dockerdaemon
before_script:
- ''
stage: dockerize
tags:
- docker
# only:
# - main
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login https://$CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
- cd ./apps/web
- docker build --progress plain -t $CI_REGISTRY/graphpolaris/frontend:latest .
- docker push $CI_REGISTRY/graphpolaris/frontend:latest
dependencies:
- build-prod
variables:
# Tell docker CLI how to talk to Docker daemon.
DOCKER_HOST: tcp://dockerdaemon:2375/
# Use the overlayfs driver for improved performance.
DOCKER_DRIVER: overlay2
# Disable TLS since we're running inside local network.
DOCKER_TLS_CERTDIR: ""
# deploy:
# stage: deploy
# script:
# - ./deploy.sh
# # only:
# # - main
# environment: production
variables:
CONTAINER_IMAGE: "graphpolaris/frontend"
IMAGE_TAG_HELM_FILE: "helm/staging/graphpolaris-frontend/values.yaml"
IMAGE_TAG_HELM_FILE_VARIABLE: "image.tag"
include:
- project: 'graphpolaris/pipelines'
ref: main
file: 'docker-build-push.yml'
# Prepare nginx
FROM nginx:1.19-alpine
FROM node:lts-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
COPY . /app
WORKDIR /app
COPY ./apps/web/dist /usr/share/nginx/html
FROM base AS build
RUN pnpm install --frozen-lockfile
# Fixes: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
ENV NODE_OPTIONS="--max-old-space-size=4096"
RUN pnpm run build
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
# Fire up nginx
FROM nginx:1.25-alpine
COPY --from=build /app/apps/web/dist /usr/share/nginx/html
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment