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 |
|