README.md 4.67 KB
Newer Older
Ansgar Burchardt's avatar
Ansgar Burchardt committed
1 2 3 4 5 6 7 8
Docker images for GitLab CI
===========================

Images
------

The current images are:

9 10 11 12
| image                    | parent            | description                                                |
|--------------------------|-------------------|------------------------------------------------------------|
| duneci/base:8            | debian:8          | Debian 8 with gcc 4.9.2, clang 3.5, cmake 3.0.2            |
| duneci/base:8-backports  | duneci/base:8     | Debian 8 with gcc 4.9.2, clang 3.8 (backport), cmake 3.0.2 |
Ansgar Burchardt's avatar
Ansgar Burchardt committed
13
| duneci/base:9            | debian:9          | Debian 9 with gcc 6.2, clang 3.8, cmake 3.7                |
14 15
| duneci/base:16.04        | ubuntu:16.04      | Ubuntu LTS 16.04 with gcc 5.4.0, clang 3.8.0, cmake 3.5.1  |
| duneci/base:16.10        | ubuntu:16.10      | Ubuntu 16.10 with gcc 6.2.0, clang 3.8.1, cmake 3.5.2      |
Ansgar Burchardt's avatar
Ansgar Burchardt committed
16 17
| duneci/dune:2.3          | duneci/base:8     | DUNE 2.3 core modules (Debian packages)                    |
| duneci/dune:2.4          | duneci/base:16.04 | DUNE 2.4 core modules (Debian packages)                    |
18
| duneci/dune:2.5          | duneci/base:9     | DUNE 2.5 core and staging modules (Debian packages)        |
Ansgar Burchardt's avatar
Ansgar Burchardt committed
19
| duneci/dune:git          | duneci/base:9     | DUNE master core and staging modules (Git)                 |
20 21
| duneci/dune-fufem:2.4    | duneci/dune:2.4   | dune-{fufem,functions,solvers,typetree} (2.4 branch)       |
| duneci/dune-fufem:git    | duneci/dune:git   | dune-{elasticity,fufem,grid-glue,solvers} (master branch)  |
Ansgar Burchardt's avatar
Ansgar Burchardt committed
22 23 24 25

`.gitlab-ci.yml`
----------------

26 27 28 29 30 31 32
Installing dependencies:
```
before_script:
  - duneci-install-module https://gitlab.dune-project.org/core/dune-common.git
  - duneci-install-module https://gitlab.dune-project.org/core/dune-geometry.git
```

Ansgar Burchardt's avatar
Ansgar Burchardt committed
33 34 35
To build with several images:
```
---
Ansgar Burchardt's avatar
Ansgar Burchardt committed
36 37
dune:2.4--gcc:
  image: duneci/dune:2.4
38
  script: duneci-standard-test
Ansgar Burchardt's avatar
Ansgar Burchardt committed
39

Ansgar Burchardt's avatar
Ansgar Burchardt committed
40 41
dune:2.4--clang:
  image: duneci/dune:2.4
42
  script: duneci-standard-test --opts=/duneci/opts.clang
Ansgar Burchardt's avatar
Ansgar Burchardt committed
43 44 45 46 47
```

You can also specify a default image and use it in several jobs:

```
Ansgar Burchardt's avatar
Ansgar Burchardt committed
48
---
Ansgar Burchardt's avatar
Ansgar Burchardt committed
49 50 51
image: duneci/dune:2.4

dune:2.4--gcc:
52
  script: duneci-standard-test
Ansgar Burchardt's avatar
Ansgar Burchardt committed
53 54

dune:2.4--clang:
55
  script: duneci-standard-test --opts=/duneci/opts.clang
Ansgar Burchardt's avatar
Ansgar Burchardt committed
56
```
57

58 59
For more information, take a look at the [GitLab documentation on `.gitlab-ci.yml`](https://docs.gitlab.com/ce/ci/yaml/README.html).

60 61 62 63 64 65 66 67 68 69 70 71 72 73
Updating gitlab-runner
----------------------

To update `gitlab-runner` on the VM:

```
docker pull gitlab/gitlab-runner:latest
docker stop gitlab-runner
docker rm -v gitlab-runner
docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest
```
74 75 76 77 78 79 80 81 82 83 84
or, if a HTTP proxy is required,
```
docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -e ftp_proxy=${ftp_proxy} -e FTP_PROXY=${FTP_PROXY} \
  -e http_proxy=${http_proxy} -e HTTP_PROXY=${HTTP_PROXY} \
  -e https_proxy=${https_proxy} -e HTTPS_PROXY=${HTTPS_PROXY} \
  -e no_proxy=${no_proxy} -e NO_PROXY=${NO_PROXY} \
  gitlab/gitlab-runner:latest
```
85 86 87 88

The current version can be shown by running

```
89
docker exec gitlab-runner gitlab-runner -v
90
```
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135

Installing gitlab-runner
------------------------

To initially install gitlab-runner:

```shell
apt install docker.io
mkdir -p /srv/gitlab-runner/config
```
then follow the steps from [Updating gitlab-runner](#updating-gitlab-runner).

Register the runner with GitLab CI:
```shell
docker exec -it gitlab-runner gitlab-runner register
```

Finally edit `/srv/gitlab-runner/config/config.toml`:
```TOML
concurrent = 4
check_interval = 0

[[runners]]
  name = "<name>"
  url = "https://gitlab.dune-project.org/ci"
  token = "<private token from registration>"
  executor = "docker"

  # Set proxy variables if needed:
  #environment = ["ftp_proxy=http://<proxy>:3128", "FTP_PROXY=http://<proxy>:3128", "http_proxy=http://<proxy>:3128", "HTTP_PROXY=http://<proxy>:3128", "https_proxy=http://<proxy>:3128", "HTTPS_PROXY=http://<proxy>:3128", "no_proxy=127.0.0.1, localhost", "NO_PROXY=127.0.0.1, localhost"]
  [runners.docker]
    # tls_verify = false
    image = "duneci/dune:latest"
    privileged = false
    security_opt = ["no-new-privileges"]
    disable_cache = false
    volumes = ["/cache"]
    allowed_images = ["duneci/*"]
    pull_policy = "if-not-present"

    # OpenMPI-2 is unhappy with the (too long) default hostnames:
    hostname = "ci"
```
See the [documentation of GitLab runner's configuration](https://docs.gitlab.com/runner/configuration/advanced-configuration.html) for details.
Please also keep the [security considerations](https://docs.gitlab.com/runner/security/index.html) in mind.