Martin Blanchard pushed to branch mablanch/160-docker-compose-feed-bin at BuildGrid / buildgrid
Commits:
-
55db6956
by Martin Blanchard at 2019-02-25T12:41:05Z
-
a1e42b1f
by Martin Blanchard at 2019-02-25T12:48:25Z
-
ac22ef7a
by Martin Blanchard at 2019-02-25T12:48:25Z
-
71306b30
by Martin Blanchard at 2019-02-25T12:48:25Z
9 changed files:
- .coveragerc
- .gitlab-ci.yml
- Dockerfile
- + data/bin/.gitignore
- + data/bin/README
- data/config/controller.conf
- data/config/storage.conf
- docker-compose.yml
- docs/source/installation.rst
Changes:
| 1 | 1 |
[run]
|
| 2 | 2 |
concurrency = multiprocessing
|
| 3 | 3 |
data_file = .coverage
|
| 4 |
-include =
|
|
| 5 |
- */buildgrid/*
|
|
| 6 |
- |
|
| 4 |
+source =
|
|
| 5 |
+ buildgrid/*
|
|
| 7 | 6 |
omit =
|
| 8 |
- # Omit profiling helper module
|
|
| 9 |
- # Omit generated code
|
|
| 10 |
- */buildgrid/google/*
|
|
| 7 |
+ buildgrid/_app/*
|
|
| 8 |
+ buildgrid/_protos/*
|
|
| 11 | 9 |
*_pb2.py
|
| 12 | 10 |
*_pb2_grpc.py
|
| 13 |
- */.eggs/*
|
|
| 14 |
- */_app/*
|
|
| 15 | 11 |
|
| 16 | 12 |
[report]
|
| 17 | 13 |
show_missing = True
|
| 18 | 14 |
precision = 2
|
| 19 |
- |
|
| 20 |
-[paths]
|
|
| 21 |
-source =
|
|
| 22 |
- buildgrid/
|
|
| 23 |
- */site-packages/buildgrid/
|
|
| 24 |
- */buildgrid/buildgrid/
|
| 1 |
-# Use a debian image with python 3.5 (and pip3) pre-installed
|
|
| 1 |
+# Debian Stretch base image with python 3.5:
|
|
| 2 |
+#
|
|
| 2 | 3 |
image: python:3.5-stretch
|
| 3 | 4 |
|
| 4 |
-variables:
|
|
| 5 |
- BGD: bgd
|
|
| 6 |
- |
|
| 7 | 5 |
stages:
|
| 8 | 6 |
- test
|
| 9 | 7 |
- post
|
| 10 | 8 |
- deploy
|
| 11 | 9 |
|
| 12 | 10 |
|
| 13 |
-before_script:
|
|
| 14 |
- - python3 -m pip install --upgrade setuptools pip
|
|
| 15 |
- - export PATH=~/.local/bin:${PATH}
|
|
| 16 |
- - python3 -m pip install --user --editable ".[tests]"
|
|
| 11 |
+# Templates and global variables.
|
|
| 12 |
+#
|
|
| 13 |
+variables:
|
|
| 14 |
+ BGD: "${CI_PROJECT_DIR}/env/bin/bgd"
|
|
| 15 |
+ PYTHON: "${CI_PROJECT_DIR}/env/bin/python"
|
|
| 16 |
+ TOOLS: "${CI_PROJECT_DIR}/env/bin"
|
|
| 17 |
+ |
|
| 18 |
+.build-template:
|
|
| 19 |
+ before_script: &install-base
|
|
| 20 |
+ - apt-get update && apt-get install -y python3 python3-venv python3-pip graphviz
|
|
| 21 |
+ - python3 -m venv env # Creates a virtual environment
|
|
| 22 |
+ - ${PYTHON} -m pip --cache-dir=.pip install --upgrade setuptools pip wheel
|
|
| 23 |
+ - ${PYTHON} -m pip --cache-dir=.pip install --editable ".[auth,docs,tests]"
|
|
| 24 |
+ cache:
|
|
| 25 |
+ paths:
|
|
| 26 |
+ - .pip
|
|
| 27 |
+ |
|
| 17 | 28 |
|
| 18 |
-.tests-template: &linux-tests
|
|
| 29 |
+# Test stage, build and test the code.
|
|
| 30 |
+#
|
|
| 31 |
+unit-tests:
|
|
| 19 | 32 |
stage: test
|
| 20 |
- variables:
|
|
| 21 |
- PYTEST_ADDOPTS: "--color=yes"
|
|
| 33 |
+ extends: .build-template
|
|
| 22 | 34 |
script:
|
| 23 |
- - python3 -m pip install --user --editable ".[auth]"
|
|
| 24 |
- - python3 setup.py test
|
|
| 35 |
+ - ${PYTHON} setup.py test
|
|
| 36 |
+ after_script:
|
|
| 25 | 37 |
- mkdir -p coverage/
|
| 26 | 38 |
- cp .coverage coverage/coverage."${CI_JOB_NAME}"
|
| 39 |
+ variables:
|
|
| 40 |
+ PYTEST_ADDOPTS: "--color=yes"
|
|
| 27 | 41 |
artifacts:
|
| 28 | 42 |
paths:
|
| 29 |
- - coverage/
|
|
| 43 |
+ - coverage/
|
|
| 30 | 44 |
|
| 31 |
-.run-dummy-job-template: &dummy-job
|
|
| 45 |
+dummy-tests:
|
|
| 32 | 46 |
stage: test
|
| 47 |
+ extends: .build-template
|
|
| 33 | 48 |
script:
|
| 34 | 49 |
- ${BGD} server start data/config/default.conf &
|
| 35 |
- - sleep 1 # Allow server to boot
|
|
| 50 |
+ - sleep 1 # Allows server to boot
|
|
| 36 | 51 |
- ${BGD} bot dummy &
|
| 37 | 52 |
- ${BGD} cas upload-dummy
|
| 38 | 53 |
- ${BGD} execute request-dummy --wait-for-completion
|
| 39 | 54 |
|
| 40 |
- |
|
| 41 |
-# Test stage, build and test the code.
|
|
| 42 |
-#
|
|
| 43 |
-tests-debian-stretch:
|
|
| 44 |
- <<: *linux-tests
|
|
| 45 |
- |
|
| 46 |
-run-dummy-job-debian:
|
|
| 47 |
- <<: *dummy-job
|
|
| 48 |
- |
|
| 49 |
-buildbox-e2e:
|
|
| 50 |
- image: registry.gitlab.com/buildgrid/buildbox/buildbox-e2e:latest
|
|
| 55 |
+e2e-tests:
|
|
| 51 | 56 |
stage: test
|
| 52 |
- before_script: []
|
|
| 57 |
+ image: registry.gitlab.com/buildgrid/buildbox/buildbox-e2e:latest
|
|
| 53 | 58 |
script:
|
| 54 | 59 |
- BUILDGRID_SOURCE_ROOT=`pwd` end-to-end-test.sh
|
| 55 | 60 |
|
| 61 |
+ |
|
| 56 | 62 |
# Post-build stage, documentation, coverage report...
|
| 57 | 63 |
#
|
| 58 | 64 |
documentation:
|
| 59 | 65 |
stage: post
|
| 66 |
+ extends: .build-template
|
|
| 60 | 67 |
script:
|
| 61 |
- - apt-get update && apt-get install -y graphviz
|
|
| 62 |
- - python3 -m pip install --user --editable ".[docs]"
|
|
| 63 |
- - make -C docs html
|
|
| 68 |
+ - PATH="${PATH}:${TOOLS}" make -C docs html
|
|
| 69 |
+ after_script:
|
|
| 64 | 70 |
- mkdir -p documentation/
|
| 65 | 71 |
- cp -a docs/build/html/. documentation/
|
| 66 | 72 |
artifacts:
|
| 67 | 73 |
paths:
|
| 68 |
- - documentation/
|
|
| 74 |
+ - documentation/
|
|
| 69 | 75 |
|
| 70 | 76 |
coverage:
|
| 71 | 77 |
stage: post
|
| 78 |
+ extends: .build-template
|
|
| 72 | 79 |
dependencies:
|
| 73 |
- - tests-debian-stretch
|
|
| 80 |
+ - unit-tests
|
|
| 74 | 81 |
coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
|
| 75 | 82 |
script:
|
| 76 |
- - python3 -m pip install --user --editable ".[tests]"
|
|
| 77 |
- - cd coverage/
|
|
| 78 |
- - ls -l .
|
|
| 79 |
- - python3 -m coverage combine --rcfile=../.coveragerc --append coverage.*
|
|
| 80 |
- - python3 -m coverage html --rcfile=../.coveragerc --directory .
|
|
| 81 |
- - python3 -m coverage report --rcfile=../.coveragerc --show-missing
|
|
| 82 |
- - python3 -m coverage erase --rcfile=../.coveragerc
|
|
| 83 |
+ - cd coverage/ && ls -l .
|
|
| 84 |
+ - ${PYTHON} -m coverage combine --rcfile=../.coveragerc --append coverage.*
|
|
| 85 |
+ - ${PYTHON} -m coverage html --rcfile=../.coveragerc --directory .
|
|
| 86 |
+ - ${PYTHON} -m coverage report --rcfile=../.coveragerc --show-missing
|
|
| 83 | 87 |
artifacts:
|
| 84 | 88 |
paths:
|
| 85 |
- - coverage/
|
|
| 89 |
+ - coverage/
|
|
| 86 | 90 |
|
| 87 | 91 |
# Deployement stage, only for merges which land on master branch.
|
| 88 | 92 |
#
|
| 89 | 93 |
pages:
|
| 90 | 94 |
stage: deploy
|
| 91 | 95 |
dependencies:
|
| 92 |
- - coverage
|
|
| 93 |
- - documentation
|
|
| 96 |
+ - coverage
|
|
| 97 |
+ - documentation
|
|
| 94 | 98 |
script:
|
| 95 |
- - mkdir -p public/coverage/
|
|
| 96 |
- - cp -a coverage/* public/coverage/
|
|
| 97 |
- - ls -la public/coverage/
|
|
| 98 |
- - cp -a documentation/* public/
|
|
| 99 |
- - ls -la public/
|
|
| 99 |
+ - mkdir -p public/coverage/
|
|
| 100 |
+ - cp -a coverage/* public/coverage/
|
|
| 101 |
+ - ls -la public/coverage/
|
|
| 102 |
+ - cp -a documentation/* public/
|
|
| 103 |
+ - ls -la public/
|
|
| 100 | 104 |
artifacts:
|
| 101 | 105 |
paths:
|
| 102 |
- - public/
|
|
| 106 |
+ - public/
|
|
| 103 | 107 |
only:
|
| 104 |
- - master
|
|
| 108 |
+ - master
|
|
| 105 | 109 |
|
| 106 |
-trigger-buildbox-e2e-rebuild:
|
|
| 110 |
+triggers:
|
|
| 107 | 111 |
stage: deploy
|
| 108 |
- variables:
|
|
| 109 |
- GIT_STRATEGY: none
|
|
| 110 |
- script:
|
|
| 112 |
+ before_script:
|
|
| 111 | 113 |
- apt-get update && apt-get install -y curl
|
| 114 |
+ script:
|
|
| 112 | 115 |
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.com/api/v4/projects/buildgrid%2Fbuildbox%2Fbuildbox-e2e/trigger/pipeline
|
| 116 |
+ variables:
|
|
| 117 |
+ GIT_STRATEGY: none
|
|
| 113 | 118 |
only:
|
| 114 | 119 |
- master
|
| ... | ... | @@ -6,7 +6,15 @@ |
| 6 | 6 |
# Builds an image from local sources.
|
| 7 | 7 |
#
|
| 8 | 8 |
|
| 9 |
-FROM python:3.5-stretch
|
|
| 9 |
+FROM debian:buster
|
|
| 10 |
+ |
|
| 11 |
+RUN [ \
|
|
| 12 |
+"apt-get", "update" ]
|
|
| 13 |
+RUN [ \
|
|
| 14 |
+"apt-get", "install", "-y", \
|
|
| 15 |
+"python3", "python3-venv", "python3-pip", \
|
|
| 16 |
+"bubblewrap", "fuse3" \
|
|
| 17 |
+]
|
|
| 10 | 18 |
|
| 11 | 19 |
# Use /app as working directory:
|
| 12 | 20 |
WORKDIR /app
|
| ... | ... | @@ -42,6 +50,9 @@ RUN [ \ |
| 42 | 50 |
# Copy the repo. contents:
|
| 43 | 51 |
COPY . /app
|
| 44 | 52 |
|
| 53 |
+# Add tools directory to the PATH:
|
|
| 54 |
+ENV PATH=$PATH:/app/tools
|
|
| 55 |
+ |
|
| 45 | 56 |
# Install BuildGrid:
|
| 46 | 57 |
RUN [ \
|
| 47 | 58 |
"/app/env/bin/python", "-m", "pip", \
|
| 1 |
+buildbox
|
|
| 2 |
+buildbox-fuse
|
|
| 3 |
+buildbox-run-bubblewrap
|
|
| 4 |
+buildbox-run-hosttools
|
|
| 5 |
+buildbox-run-userchroot
|
|
| 6 |
+buildbox-worker
|
| 1 |
+ ¡FOR LOCAL DEVELOPMENT ONLY!
|
|
| 2 |
+ |
|
| 3 |
+This directory is used by BuildGrid's main Docker Compose manifest: it gets
|
|
| 4 |
+bind mounted in worker bot containers and is included in PATH. Place here
|
|
| 5 |
+static binaries of the external tools needed by the bots. Typical use case is
|
|
| 6 |
+to copy here the `buildbox` binary used as a backend by the `buildbox` bot.
|
|
| 7 |
+ |
|
| 8 |
+ ¡FOR LOCAL DEVELOPMENT ONLY!
|
| ... | ... | @@ -6,7 +6,7 @@ server: |
| 6 | 6 |
description: >
|
| 7 | 7 |
Docker Compose controller configuration:
|
| 8 | 8 |
- Unauthenticated plain HTTP at :50051
|
| 9 |
- - Single instance: local
|
|
| 9 |
+ - Single instance: [unnamed]
|
|
| 10 | 10 |
- Expects a remote CAS at :50052
|
| 11 | 11 |
- Hosted services:
|
| 12 | 12 |
- ActionCache
|
| ... | ... | @@ -19,14 +19,14 @@ monitoring: |
| 19 | 19 |
enabled: false
|
| 20 | 20 |
|
| 21 | 21 |
instances:
|
| 22 |
- - name: local
|
|
| 22 |
+ - name: ''
|
|
| 23 | 23 |
description: |
|
| 24 |
- The unique 'local' instance.
|
|
| 24 |
+ The unique unnamed instance.
|
|
| 25 | 25 |
|
| 26 | 26 |
storages:
|
| 27 | 27 |
- !remote-storage &data-store
|
| 28 | 28 |
url: http://storage:50052
|
| 29 |
- instance-name: local
|
|
| 29 |
+ instance-name: ''
|
|
| 30 | 30 |
|
| 31 | 31 |
services:
|
| 32 | 32 |
- !action-cache &build-cache
|
| ... | ... | @@ -6,7 +6,7 @@ server: |
| 6 | 6 |
description: >
|
| 7 | 7 |
Docker Compose storage configuration:
|
| 8 | 8 |
- Unauthenticated plain HTTP at :50052
|
| 9 |
- - Single instance: local
|
|
| 9 |
+ - Single instance: [unnamed]
|
|
| 10 | 10 |
- On-disk data stored in /var
|
| 11 | 11 |
- Hosted services:
|
| 12 | 12 |
- ContentAddressableStorage
|
| ... | ... | @@ -19,9 +19,9 @@ monitoring: |
| 19 | 19 |
enabled: false
|
| 20 | 20 |
|
| 21 | 21 |
instances:
|
| 22 |
- - name: local
|
|
| 22 |
+ - name: ''
|
|
| 23 | 23 |
description: |
|
| 24 |
- The unique 'local' instance.
|
|
| 24 |
+ The unique unnamed instance.
|
|
| 25 | 25 |
|
| 26 | 26 |
storages:
|
| 27 | 27 |
- !disk-storage &data-store
|
| ... | ... | @@ -58,10 +58,24 @@ services: |
| 58 | 58 |
bots: # To be scaled horizontaly
|
| 59 | 59 |
image: buildgrid:local
|
| 60 | 60 |
command: [
|
| 61 |
- "bot", "--parent=local",
|
|
| 61 |
+ "bot", "--parent=",
|
|
| 62 | 62 |
"--remote=http://controller:50051",
|
| 63 | 63 |
"--remote-cas=http://storage:50052",
|
| 64 | 64 |
"host-tools"]
|
| 65 |
+ # "bot", "--parent=",
|
|
| 66 |
+ # "--remote=http://controller:50051",
|
|
| 67 |
+ # "--remote-cas=http://storage:50052",
|
|
| 68 |
+ # "buildbox",
|
|
| 69 |
+ # "--local-cas", "/var/lib/buildgrid/cache",
|
|
| 70 |
+ # "--fuse-dir", "/mnt"]
|
|
| 71 |
+ privileged: true
|
|
| 72 |
+ volumes:
|
|
| 73 |
+ - type: volume
|
|
| 74 |
+ source: cache
|
|
| 75 |
+ target: /var/lib/buildgrid/cache
|
|
| 76 |
+ - type: bind
|
|
| 77 |
+ source: ./data/bin
|
|
| 78 |
+ target: /app/tools
|
|
| 65 | 79 |
depends_on:
|
| 66 | 80 |
- controller
|
| 67 | 81 |
networks:
|
| ... | ... | @@ -72,4 +86,5 @@ networks: |
| 72 | 86 |
host:
|
| 73 | 87 |
|
| 74 | 88 |
volumes:
|
| 89 |
+ cache:
|
|
| 75 | 90 |
data:
|
| ... | ... | @@ -168,7 +168,7 @@ Once completed, you can start a minimal grid by running: |
| 168 | 168 |
- An execution and action-cache service available at
|
| 169 | 169 |
``http://localhost:50051``.
|
| 170 | 170 |
- An CAS service available at ``http://localhost:50052``.
|
| 171 |
- - A single ``local`` instance with one host-tools based worker bot attached.
|
|
| 171 |
+ - A single unnamed instance with one host-tools based worker bot attached.
|
|
| 172 | 172 |
|
| 173 | 173 |
.. hint::
|
| 174 | 174 |
|
