From 072f31d7f763488e187fc28d50b49714be56e679 Mon Sep 17 00:00:00 2001 From: jp Date: Fri, 24 Jan 2020 11:32:01 -0500 Subject: [PATCH 1/2] Major changes to gitlab-ci.yml: - Change order to build, test, release - Add global cache for sharing build between jobs - Add node build artifacts for future release usage (https://gitlab.com/gitlab-org/gitlab/merge_requests/19298) - Add docker image building for container registry --- .gitlab-ci.yml | 93 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cef4ec5c..5542e7f4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,26 +1,97 @@ -image: node:10 +image: node:10-alpine + +variables: &global_variables + DOCKER_DRIVER: overlay2 + DOCKER_HOST: unix:///var/run/docker.sock + +cache: &global_cache_policy + key: '$CI_COMMIT_SHORT_SHA' + policy: pull-push + paths: + - node_modules/ + - build stages: - - lint - build - test + - release + +build: + stage: build + before_script: &before-build + - apk --no-cache add git + script: + - npm install + - npm run build:prod + artifacts: &release-artifacts + name: "admin-fe-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA" + paths: + - dist/ lint: - stage: lint - script: + stage: test + before_script: &before-yarn + - apk --no-cache add git + - yarn cache clean - yarn + cache: + key: '$CI_COMMIT_SHORT_SHA' + policy: pull + script: - yarn lint test: stage: test - variables: - APT_CACHE_DIR: apt-cache + before_script: *before-yarn + cache: + key: '$CI_COMMIT_SHORT_SHA' + policy: pull script: - - yarn - yarn test -build: - stage: build +docker: + stage: release + image: docker:latest + cache: {} + dependencies: [] + variables: &docker-variables + IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA + IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest + IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:stable + before_script: &before-docker + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull $IMAGE_TAG_SLUG || true + - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds) + - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA + allow_failure: true script: - - yarn - - npm run build:prod + - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . + - docker push $IMAGE_TAG + - docker push $IMAGE_TAG_SLUG + - docker push $IMAGE_TAG_LATEST + tags: + - dind + only: + - develop@pleroma/admin-fe + - /^(features|ci)\/.*/@jp/admin-fe + +docker-stable: + stage: release + image: docker:latest + cache: {} + dependencies: [] + variables: *docker-variables + before_script: *before-docker + allow_failure: true + script: + - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . + - docker push $IMAGE_TAG + - docker push $IMAGE_TAG_SLUG + - docker push $IMAGE_TAG_LATEST_STABLE + tags: + - dind + only: + - master@pleroma/admin-fe + + From e813cbf7ddb5b05c8aaa1f1ef7b601ab7a5f23e5 Mon Sep 17 00:00:00 2001 From: jp Date: Fri, 24 Jan 2020 11:32:49 -0500 Subject: [PATCH 2/2] Update docker configuration: - .dockerignore for building - Dockerfile created usign node-10-alpine and nginx-mainline - docker/ scripts and templates added --- .dockerignore | 30 +++++++++++++++++++++++++++++ Dockerfile | 38 +++++++++++++++++++++++++++++++++++++ docker/docker-entrypoint.sh | 4 ++++ docker/nginx.conf.tpl | 32 +++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100755 docker/docker-entrypoint.sh create mode 100644 docker/nginx.conf.tpl diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8841fdb7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +# block everything +** + +# allowed files +!AGPL-3 +!CHANGELOG.md +!README.md +!README.png +!.babelrc +!.eslintignore +!.eslintrc.js +!.postcssrc.js +!favicon.ico +!index.html +!package.json +!yarn.lock + +# allowed subdirectories +!/build/** +!/config/** +!/docker/** +!/public/** +!/static/** +!/src/** + +# blocked subdirectory files +**/*.log +**/*~ +**/.DS_Store +**/Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..fef057d9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM node:10-alpine as build + +COPY . . + +RUN apk --no-cache add git && \ + npm install && \ + npm run build:prod + +FROM nginx:mainline-alpine + +LABEL maintainer="ops@pleroma.social" \ + org.opencontainers.image.title="pleroma-adminfe" \ + org.opencontainers.image.description="Pleroma-adminfe for Docker" \ + org.opencontainers.image.authors="ops@pleroma.social" \ + org.opencontainers.image.vendor="pleroma.social" \ + org.opencontainers.image.documentation="https://git.pleroma.social/pleroma/pleroma-adminfe" \ + org.opencontainers.image.licenses="AGPL-3.0" \ + org.opencontainers.image.url="https://pleroma.social" \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.created=$BUILD_DATE + + +ARG DATA=/usr/share/nginx/html + +COPY --from=build /dist/ ${DATA} + +COPY ./docker/docker-entrypoint.sh /usr/local/bin/ + +COPY ./docker/nginx.conf.tpl /etc/nginx/nginx.conf.tpl + +RUN apk add --no-cache gettext + +EXPOSE 80 + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + +CMD exec nginx -g 'daemon off;' + diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100755 index 00000000..eaf84fe0 --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < "/etc/nginx/nginx.conf.tpl" > "/etc/nginx/nginx.conf" +exec "$@" diff --git a/docker/nginx.conf.tpl b/docker/nginx.conf.tpl new file mode 100644 index 00000000..0f16dafa --- /dev/null +++ b/docker/nginx.conf.tpl @@ -0,0 +1,32 @@ +user nginx; +worker_processes 1; +error_log /var/log/nginx/error.log warn; +pid /tmp/nginx.pid; +events { + worker_connections 1024; +} +http { + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + 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; + keepalive_timeout 65; + proxy_cache_path /tmp/pleroma-media-cache levels=1:2 keys_zone=pleroma_media_cache:10m max_size=10g + inactive=720m use_temp_path=off; + server { + listen 80; + server_name _; + root /usr/share/nginx/html; + location / { + try_files $uri $uri/ /index.html; + } + } +}