Merge branch 'bvander/docker-build-updates' into 'master'
docker build updates See merge request grassrootseconomics/cic-staff-client!11
This commit is contained in:
commit
32ebe3f961
218
.gitlab-ci.yml
218
.gitlab-ci.yml
@ -1,102 +1,134 @@
|
|||||||
stages:
|
stages:
|
||||||
- install
|
|
||||||
- build
|
- build
|
||||||
- test
|
# - test
|
||||||
- package
|
# - package
|
||||||
|
|
||||||
cache:
|
image:
|
||||||
key:
|
name: gcr.io/kaniko-project/executor:debug
|
||||||
files:
|
entrypoint: [""]
|
||||||
- package-lock.json
|
|
||||||
paths:
|
|
||||||
- node_modules/
|
|
||||||
policy: pull
|
|
||||||
|
|
||||||
image: node:alpine
|
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
PROJECT_PATH: "$CI_PROJECT_DIR"
|
KANIKO_CACHE_ARGS: "--cache=true --cache-copy-layers=true --cache-ttl=24h"
|
||||||
APP_OUTPUT_PATH: "$CI_PROJECT_DIR/dist/cic-staff-client"
|
|
||||||
OUTPUT_PATH: "$CI_PROJECT_DIR/dist"
|
|
||||||
CLI_VERSION: 10.2.0
|
|
||||||
|
|
||||||
install_dependencies:
|
ng_build_merge_request:
|
||||||
stage: install
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
script:
|
|
||||||
- npm install -g @angular/cli@$CLI_VERSION
|
|
||||||
- npm install
|
|
||||||
only:
|
|
||||||
refs:
|
|
||||||
- merge_requests
|
|
||||||
- master
|
|
||||||
changes:
|
|
||||||
- package-lock.json
|
|
||||||
|
|
||||||
build:
|
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
script:
|
|
||||||
- npm ng build --prod
|
|
||||||
after_script:
|
|
||||||
- mv $PROJECT_PATH/nginx.conf $PROJECT_PATH/default.conf
|
|
||||||
- cp $PROJECT_PATH/default.conf $APP_OUTPUT_PATH
|
|
||||||
- cp $PROJECT_PATH/Dockerfile $APP_OUTPUT_PATH
|
|
||||||
artifacts:
|
|
||||||
name: "cic-staff-client-pipeline"
|
|
||||||
expire_in: 1 days
|
|
||||||
paths:
|
|
||||||
- $APP_OUTPUT_PATH
|
|
||||||
|
|
||||||
test:karma:
|
|
||||||
stage: test
|
|
||||||
allow_failure: false
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
before_script:
|
|
||||||
- apk add chromium
|
|
||||||
- export CHROME_BIN=/usr/bin/chromium-browser
|
|
||||||
script:
|
|
||||||
- npm ng test --code-coverage --progress false --watch false --browsers=GitlabChromeHeadless
|
|
||||||
coverage: '/Statements\s+:\s\d+.\d+%/'
|
|
||||||
artifacts:
|
|
||||||
name: "tests-and-coverage"
|
|
||||||
reports:
|
|
||||||
junit:
|
|
||||||
- $OUTPUT_PATH/tests/junit-test-results.xml
|
|
||||||
cobertura:
|
|
||||||
- $OUTPUT_PATH/coverage/cobetura-coverage.xml
|
|
||||||
paths:
|
|
||||||
- coverage/
|
|
||||||
|
|
||||||
test:e2e:
|
|
||||||
stage: test
|
|
||||||
allow_failure: false
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
script:
|
|
||||||
- npm ng e2e
|
|
||||||
|
|
||||||
test:nglint:
|
|
||||||
stage: test
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
script:
|
|
||||||
- npm ng lint
|
|
||||||
|
|
||||||
docker-build:
|
|
||||||
stage: package
|
|
||||||
image: docker:latest
|
|
||||||
services:
|
|
||||||
- docker:dind
|
|
||||||
variables:
|
variables:
|
||||||
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA"
|
|
||||||
before_script:
|
|
||||||
- docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
|
|
||||||
script:
|
script:
|
||||||
- docker build -t $IMAGE_TAG -f Dockerfile .
|
- mkdir -p /kaniko/.docker
|
||||||
- docker push $IMAGE_TAG
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > "/kaniko/.docker/config.json"
|
||||||
only:
|
- /kaniko/executor --context . $KANIKO_CACHE_ARGS --cache-repo $CI_REGISTRY_IMAGE --no-push
|
||||||
- master
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
when: always
|
||||||
|
|
||||||
|
ng_build:
|
||||||
|
stage: build
|
||||||
|
variables:
|
||||||
|
IMAGE_TAG_BASE: $CI_REGISTRY_IMAGE:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA
|
||||||
|
LATEST_TAG: $CI_REGISTRY_IMAGE:latest
|
||||||
|
script:
|
||||||
|
- export IMAGE_TAG="$IMAGE_TAG_BASE-$(date +%F.%H%M%S)"
|
||||||
|
- mkdir -p /kaniko/.docker
|
||||||
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > "/kaniko/.docker/config.json"
|
||||||
|
- /kaniko/executor --context . $KANIKO_CACHE_ARGS --destination $IMAGE_TAG --destination $CI_REGISTRY_IMAGE/$APP_NAME:latest
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "master"
|
||||||
|
when: always
|
||||||
|
|
||||||
|
|
||||||
|
# cache:
|
||||||
|
# key:
|
||||||
|
# files:
|
||||||
|
# - package-lock.json
|
||||||
|
# paths:
|
||||||
|
# - node_modules/
|
||||||
|
# policy: pull
|
||||||
|
|
||||||
|
# image: node:alpine
|
||||||
|
|
||||||
|
# variables:
|
||||||
|
# PROJECT_PATH: "$CI_PROJECT_DIR"
|
||||||
|
# APP_OUTPUT_PATH: "$CI_PROJECT_DIR/dist/cic-staff-client"
|
||||||
|
# OUTPUT_PATH: "$CI_PROJECT_DIR/dist"
|
||||||
|
# CLI_VERSION: 10.2.0
|
||||||
|
|
||||||
|
# install_dependencies:
|
||||||
|
# stage: install
|
||||||
|
# tags:
|
||||||
|
# - docker
|
||||||
|
# script:
|
||||||
|
# - npm install -g @angular/cli@$CLI_VERSION
|
||||||
|
# - npm install
|
||||||
|
# only:
|
||||||
|
# refs:
|
||||||
|
# - merge_requests
|
||||||
|
# - master
|
||||||
|
# changes:
|
||||||
|
# - package-lock.json
|
||||||
|
|
||||||
|
# build:
|
||||||
|
# stage: build
|
||||||
|
# tags:
|
||||||
|
# - docker
|
||||||
|
# script:
|
||||||
|
# - npm ng build --prod
|
||||||
|
# after_script:
|
||||||
|
# - mv $PROJECT_PATH/nginx.conf $PROJECT_PATH/default.conf
|
||||||
|
# - cp $PROJECT_PATH/default.conf $APP_OUTPUT_PATH
|
||||||
|
# - cp $PROJECT_PATH/Dockerfile $APP_OUTPUT_PATH
|
||||||
|
# artifacts:
|
||||||
|
# name: "cic-staff-client-pipeline"
|
||||||
|
# expire_in: 1 days
|
||||||
|
# paths:
|
||||||
|
# - $APP_OUTPUT_PATH
|
||||||
|
|
||||||
|
# test:karma:
|
||||||
|
# stage: test
|
||||||
|
# allow_failure: false
|
||||||
|
# tags:
|
||||||
|
# - docker
|
||||||
|
# before_script:
|
||||||
|
# - apk add chromium
|
||||||
|
# - export CHROME_BIN=/usr/bin/chromium-browser
|
||||||
|
# script:
|
||||||
|
# - npm ng test --code-coverage --progress false --watch false --browsers=GitlabChromeHeadless
|
||||||
|
# coverage: '/Statements\s+:\s\d+.\d+%/'
|
||||||
|
# artifacts:
|
||||||
|
# name: "tests-and-coverage"
|
||||||
|
# reports:
|
||||||
|
# junit:
|
||||||
|
# - $OUTPUT_PATH/tests/junit-test-results.xml
|
||||||
|
# cobertura:
|
||||||
|
# - $OUTPUT_PATH/coverage/cobetura-coverage.xml
|
||||||
|
# paths:
|
||||||
|
# - coverage/
|
||||||
|
|
||||||
|
# test:e2e:
|
||||||
|
# stage: test
|
||||||
|
# allow_failure: false
|
||||||
|
# tags:
|
||||||
|
# - docker
|
||||||
|
# script:
|
||||||
|
# - npm ng e2e
|
||||||
|
|
||||||
|
# test:nglint:
|
||||||
|
# stage: test
|
||||||
|
# tags:
|
||||||
|
# - docker
|
||||||
|
# script:
|
||||||
|
# - npm ng lint
|
||||||
|
|
||||||
|
# docker-build:
|
||||||
|
# stage: package
|
||||||
|
# image: docker:latest
|
||||||
|
# services:
|
||||||
|
# - docker:dind
|
||||||
|
# variables:
|
||||||
|
# IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA"
|
||||||
|
# before_script:
|
||||||
|
# - docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
|
||||||
|
# script:
|
||||||
|
# - docker build -t $IMAGE_TAG -f Dockerfile .
|
||||||
|
# - docker push $IMAGE_TAG
|
||||||
|
# only:
|
||||||
|
# - master
|
||||||
|
12
Dockerfile
12
Dockerfile
@ -1,4 +1,3 @@
|
|||||||
### STAGE 1: Build ###
|
|
||||||
# defining version of the base image
|
# defining version of the base image
|
||||||
FROM node:alpine as build
|
FROM node:alpine as build
|
||||||
|
|
||||||
@ -6,15 +5,16 @@ FROM node:alpine as build
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# copying the json files into the image
|
# copying the json files into the image
|
||||||
COPY package*.json ./
|
COPY package*.json .
|
||||||
|
COPY patch-webpack.js .
|
||||||
|
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
# copying rest of project
|
# copying rest of project
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# running build script
|
# running build script
|
||||||
RUN npm run build --prod
|
RUN npm run build:prod
|
||||||
|
|
||||||
### STAGE 2: Setup ###
|
### STAGE 2: Setup ###
|
||||||
# defining nginx image version
|
# defining nginx image version
|
||||||
@ -27,8 +27,8 @@ RUN rm -rf /usr/share/nginx/html/*
|
|||||||
COPY --from=build /app/dist/cic-staff-client /usr/share/nginx/html
|
COPY --from=build /app/dist/cic-staff-client /usr/share/nginx/html
|
||||||
|
|
||||||
# copy nginx configuration file
|
# copy nginx configuration file
|
||||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
COPY nginx.conf /etc/nginx/
|
||||||
|
|
||||||
EXPOSE 80 443
|
EXPOSE 80
|
||||||
|
|
||||||
CMD [ "nginx", "-g", "daemon off;" ]
|
CMD [ "nginx", "-g", "daemon off;" ]
|
||||||
|
47
nginx.conf
47
nginx.conf
@ -1,8 +1,41 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
user nginx;
|
||||||
location / {
|
worker_processes 1;
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html index.htm;
|
error_log /var/log/nginx/error.log warn;
|
||||||
try_files $uri $uri/ /index.html =404;
|
pid /var/run/nginx.pid;
|
||||||
}
|
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
#tcp_nopush on;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
#gzip on;
|
||||||
|
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
try_files $uri $uri/ /index.html =404;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,10 +36,6 @@ function setConfigs(configs): void {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process.env.CIC_REGISTRY_ADDRESS) {
|
|
||||||
console.error(colors.red('All the required environment variables were not provided!'));
|
|
||||||
process.exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isProduction) {
|
if (isProduction) {
|
||||||
console.log(colors.cyan('Running in production environment!'));
|
console.log(colors.cyan('Running in production environment!'));
|
||||||
|
Loading…
Reference in New Issue
Block a user