Gitlab CI

Gitlab Container

# docker-compose.yml
version: "2"

services:
  gitlab:
    image: "gitlab/gitlab-ce:latest"
    restart: always
    hostname: "172.17.0.1"
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://172.17.0.1:9090"
        gitlab_rails["gitlab_shell_ssh_port"] = 2224
    ports:
      - "9090:9090"
      - "2224:22"
    volumes:
      - "./config:/etc/gitlab"
      - "./logs:/var/log/gitlab"
      - "./data:/var/opt/gitlab"

Gitlab runner

Start runner

#!/bin/sh
docker run -d --name gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v `pwd`/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

Register runner

$ docker exec -it gitlab-runner gitlab-runner register

Config

# config.toml

[[runners]]
  name = "bender"
  url = "http://"172.17.0.1:9090/"
  token = "3bd3d65fd0fe66bcece672a2eb7603"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "rocker/r-base"
    privileged = false
    disable_cache = false
    volumes = ["/www/data_science:/share_that", "/cache"]
    shm_size = 0
    pull_policy = "never"
  [runners.cache]

Pipeline

# .gitlab-ci.yml
stages:
  - julia
  - r
  - deploy

julia:
  stage: julia
  image: julia
  artifacts:
    paths:
      - that.csv
    expire_in: 5 minutes
  script:
    - julia create_csv.jl

r:
  stage: r
  image: rocker/r-base
  script:
    - Rscript -e "df <- read.csv('that.csv'); do_science(df)"

deploy:
  stage: deploy
  image: alpine
  script:
    - cp that.csv /www/public