在docker中執行gitlab-runner

環境:ubuntu 16.04 LTS
目的:使用Docker安裝和配置GitLab Runner,搭建GitLab CI持續集成環境。node

安裝gitlab-runner

$ docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

參數說明:git

  • -d: 設置容器後臺運行
  • --name:容器名稱
  • -restart always:每次啓動容器就重啓 gitlab-runner
  • -v: 共享目錄掛載

安裝好後,執行$ docker ps 查看容器是否運行。docker

註冊和初始化

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

gitlab-runner register是進入gitlab-runner容器的執行命令,用於註冊和初始化gitlab-runner
如下是個人配置:注意:docker image爲知足你項目構建所需環境的鏡像。
clipboard.pngnpm

咱們也能夠編輯vim /srv/gitlab-runner/config/config.toml,手動修改配置:json

concurrent = 1
check_interval = 0

[[runners]]
  name = "test"
  url = "https://xxxx.oooo.com"
  token = "3894a417b64744e942008bcc51123a"
  executor = "docker"
  builds_dir = "/gitlab/runner-builds"
  cache_dir = "/gitlab/runner-cache"
  [runners.docker]
    tls_verify = false
    image = "node:latest"
    privileged = false
    disable_cache = false
    volumes = ["/data/gitlab-runner:/gitlab"]
    shm_size = 0
    pull_policy = "if-not-present"
  [runners.cache]

gitlab-ci token能夠從gitlab上的項目的CI設置中得到。
builds_dir 爲文件存放位置
volumes 掛載目錄
pull_policy 設置gitlab是否從遠程拉去image,若是iamge是本地的須要配置該屬性的值爲: if-not-present 或者 neverubuntu

建立.gitlab-ci.yml文件

個人項目爲nodejs項目,如下爲測試配置。vim

stages:
  - install

cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
    - node_modules/

job-install:
  stage: install
  script:
    - whoami
    - echo $SHELL
    - rm -rf node_modules/
    - pwd
    - source ~/.bashrc
    - nvm use 8
    - node -v
    - yarn
  only:
    - preview
  tags:
    - test

配置好gitlab-ci文件以後,提交修改,並將最新的修改推送到origin/preview分支,便可觸發CI:api

Running with gitlab-runner 10.2.0 (0a75cdd1)
  on test (3894a417)
Using Docker executor with image followme/node:v1 ...
Using docker image sha256:07e33b24b6a9bebc0e0d8ba24f15b4b3c0f6fcf321a3809371a6211ac1afc38e for predefined container...
Using locally found image version due to if-not-present pull policy
Using docker image followme/node:v1 ID=sha256:c99c549e8227e2323d1cebb6f988d5d8f6de7f77e1967fe0f02878b85cb72b0f for build container...
Running on runner-3894a417-project-643-concurrent-0 via 304e3efed168...
Cloning repository...
Cloning into '/gitlab/runner-builds/3894a417/0/Frontend/api-member'...
Checking out 311e85cb as preview...
Skipping Git submodules setup
Checking cache for preview...
Successfully extracted cache
$ whoami
root
$ echo $SHELL
/bin/bash
$ rm -rf node_modules/
$ pwd
/gitlab/runner-builds/3894a417/0/Frontend/api-member
$ source ~/.bashrc
$ nvm use 8
Now using node v8.3.0 (npm v5.3.0)
$ node -v
v8.3.0
$ yarn
yarn install v1.3.2
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 7.21s.
Creating cache preview...
node_modules/: found 5627 matching files           
Created cache
Job succeeded

注意:以前我是在Ubuntu14.04版本的系統上作這些配置,可是當執行CI的時候總會遇到如下報錯:
ERROR: Preparation failed: Error reading remote info: json: cannot unmarshal number into Go struct field Info.Debug of type boolbash

將系統升級爲16.04後解決該問題gitlab

相關文章
相關標籤/搜索