switch to custom CI base image with dependencies installed

This commit is contained in:
Jens Langhammer 2019-04-18 10:15:44 +02:00
parent 3cfe45d3cb
commit 8143fae2d6
2 changed files with 123 additions and 102 deletions

View File

@ -1,127 +1,136 @@
# Global Variables # Global Variables
before_script:
- "python3 -m pip install -U virtualenv"
- "virtualenv env"
- "source env/bin/activate"
- "pip3 install -U -r requirements-dev.txt"
stages: stages:
- test - build-buildimage
- build - test
- docs - build
- deploy - docs
image: python:3.6 - deploy
image: docker.pkg.beryju.org/passbook-build-base:latest
services: services:
- postgres:latest - postgres:latest
- redis:latest - redis:latest
variables: variables:
POSTGRES_DB: passbook POSTGRES_DB: passbook
POSTGRES_USER: passbook POSTGRES_USER: passbook
POSTGRES_PASSWORD: "EK-5jnKfjrGRm<77" POSTGRES_PASSWORD: "EK-5jnKfjrGRm<77"
include: include:
- /client-packages/allauth/.gitlab-ci.yml - /client-packages/allauth/.gitlab-ci.yml
create-build-image:
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
before_script:
- echo "{\"auths\":{\"docker.$NEXUS_URL\":{\"auth\":\"$NEXUS_AUTH\"}}}" > /kaniko/.docker/config.json
script:
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.build-base --destination docker.pkg.beryju.org/passbook-build-base:latest --destination docker.pkg.beryju.org/passbook-build-base:0.1.32-beta
stage: build-buildimage
only:
refs:
- tags
- /^version/.*$/
isort: isort:
script: script:
- isort -c -sg env - isort -c -sg env
stage: test stage: test
migrations: migrations:
script: script:
- python manage.py migrate - python manage.py migrate
stage: test stage: test
prospector: prospector:
script: script:
- prospector - prospector
stage: test stage: test
pylint: pylint:
script: script:
- pylint passbook - pylint passbook
stage: test stage: test
coverage: coverage:
script: script:
- python manage.py collectstatic --no-input - python manage.py collectstatic --no-input
- coverage run manage.py test - coverage run manage.py test
- coverage report - coverage report
stage: test stage: test
bandit: bandit:
script: script:
- bandit -r passbook - bandit -r passbook
stage: test stage: test
package-docker: package-docker:
image: image:
name: gcr.io/kaniko-project/executor:debug name: gcr.io/kaniko-project/executor:debug
entrypoint: [""] entrypoint: [""]
before_script: before_script:
- echo "{\"auths\":{\"docker.$NEXUS_URL\":{\"auth\":\"$NEXUS_AUTH\"}}}" > /kaniko/.docker/config.json - echo "{\"auths\":{\"docker.$NEXUS_URL\":{\"auth\":\"$NEXUS_AUTH\"}}}" > /kaniko/.docker/config.json
script: script:
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination docker.pkg.beryju.org/passbook:latest --destination docker.pkg.beryju.org/passbook:0.1.32-beta - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination docker.pkg.beryju.org/passbook:latest --destination docker.pkg.beryju.org/passbook:0.1.32-beta
stage: build stage: build
only: only:
- tags - tags
- /^version/.*$/ - /^version/.*$/
package-helm: package-helm:
stage: build stage: build
script: script:
- curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash - curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash
- helm init --client-only - helm init --client-only
- helm package helm/passbook - helm package helm/passbook
- ./manage.py nexus_upload --method put --url $NEXUS_URL --auth $NEXUS_AUTH --repo helm *.tgz - ./manage.py nexus_upload --method put --url $NEXUS_URL --auth $NEXUS_AUTH --repo helm *.tgz
only: only:
- tags - tags
- /^version/.*$/ - /^version/.*$/
package-debian: package-debian:
before_script: before_script:
- apt update - apt update
- apt install -y --no-install-recommends build-essential debhelper devscripts equivs python3 python3-dev python3-pip libsasl2-dev libldap2-dev - apt install -y --no-install-recommends build-essential debhelper devscripts equivs python3 python3-dev python3-pip libsasl2-dev libldap2-dev
- mk-build-deps debian/control - mk-build-deps debian/control
- apt install ./*build-deps*deb -f -y - apt install ./*build-deps*deb -f -y
- python3 -m pip install -U virtualenv pip - python3 -m pip install -U virtualenv pip
- virtualenv env - virtualenv env
- source env/bin/activate - source env/bin/activate
- pip3 install -U -r requirements.txt -r requirements-dev.txt - pip3 install -U -r requirements.txt -r requirements-dev.txt
- ./manage.py collectstatic --no-input - ./manage.py collectstatic --no-input
image: ubuntu:18.04 image: ubuntu:18.04
script: script:
- debuild -us -uc - debuild -us -uc
- cp ../passbook*.deb . - cp ../passbook*.deb .
- ./manage.py nexus_upload --method post --url $NEXUS_URL --auth $NEXUS_AUTH --repo apt passbook*deb - ./manage.py nexus_upload --method post --url $NEXUS_URL --auth $NEXUS_AUTH --repo apt passbook*deb
artifacts: artifacts:
paths: paths:
- passbook*deb - passbook*deb
expire_in: 2 days expire_in: 2 days
stage: build stage: build
only: only:
- tags - tags
- /^version/.*$/ - /^version/.*$/
package-client-package-allauth: package-client-package-allauth:
script: script:
- cd client-packages/allauth - cd client-packages/allauth
- python setup.py sdist - python setup.py sdist
- twine upload --username $TWINE_USERNAME --password $TWINE_PASSWORD dist/* - twine upload --username $TWINE_USERNAME --password $TWINE_PASSWORD dist/*
stage: build stage: build
only: only:
refs: refs:
- tags - tags
- /^version/.*$/ - /^version/.*$/
changes: changes:
- client-packages/allauth/** - client-packages/allauth/**
package-client-package-sentry: package-client-package-sentry:
script: script:
- cd client-packages/sentry-auth-passbook - cd client-packages/sentry-auth-passbook
- python setup.py sdist - python setup.py sdist
- twine upload --username $TWINE_USERNAME --password $TWINE_PASSWORD dist/* - twine upload --username $TWINE_USERNAME --password $TWINE_PASSWORD dist/*
stage: build stage: build
only: only:
refs: refs:
- tags - tags
- /^version/.*$/ - /^version/.*$/
changes: changes:
- client-packages/sentry-auth-passbook/** - client-packages/sentry-auth-passbook/**
# docs: # docs:
# stage: docs # stage: docs
# only: # only:

12
Dockerfile.build-base Normal file
View File

@ -0,0 +1,12 @@
FROM python:3.6
COPY ./passbook/ /app/passbook
COPY ./client-packages/ /app/client-packages
COPY ./requirements.txt /app/
COPY ./requirements-dev.txt /app/
WORKDIR /app/
RUN apt-get update && apt-get install libssl-dev libffi-dev libpq-dev -y && \
pip install -U -r requirements-dev.txt && \
rm -rf /app/*