GitLab-CI 從安裝到差點放棄

故事是這樣的..
咱們源碼從github遷移到自主搭建的gitlab服務器管理,之前用github的時候是使用jenkins進行持續集成的,原本應用上jenkins我只要配一下webhook就能夠了,可我就是任性。
我心想,既然已經遷移到gitlab了,爲什麼不用用gitlab-ci呢,更況且gitlab宣稱集成了gitlab-ci,應該很快就能應用上。
我正是這樣把本身推動坑的。html

名詞解釋

進坑前先理清一些名詞,以及他們之間的關係。node

1. Gitlab

GitLab是一個利用Ruby on Rails開發的開源應用程序,實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目。
它擁有與GitHub相似的功能,可以瀏覽源代碼,管理缺陷和註釋。能夠管理團隊對倉庫的訪問,它很是易於瀏覽提交過的版本並提供一個文件歷史庫。團隊成員能夠利用內置的簡單聊天程序(Wall)進行交流。它還提供一個代碼片斷收集功能能夠輕鬆實現代碼複用,便於往後有須要的時候進行查找。mysql

2. Gitlab-CI

Gitlab-CI是GitLab Continuous Integration(Gitlab持續集成)的簡稱。
從Gitlab的8.0版本開始,gitlab就全面集成了Gitlab-CI,而且對全部項目默認開啓。
只要在項目倉庫的根目錄添加.gitlab-ci.yml文件,而且配置了Runner(運行器),那麼每一次合併請求(MR)或者push都會觸發CI pipelinelinux

3. Gitlab-runner

Gitlab-runner.gitlab-ci.yml腳本的運行器,Gitlab-runner是基於Gitlab-CI的API進行構建的相互隔離的機器(或虛擬機)。GitLab Runner 不須要和Gitlab安裝在同一臺機器上,可是考慮到GitLab Runner的資源消耗問題和安全問題,也不建議這二者安裝在同一臺機器上。git

Gitlab Runner分爲兩種,Shared runners和Specific runners。
Specific runners只能被指定的項目使用,Shared runners則能夠運行全部開啓 Allow shared runners選項的項目。github

4. Pipelines

Pipelines是定義於.gitlab-ci.yml中的不一樣階段的不一樣任務。
我把Pipelines理解爲流水線,流水線包含有多個階段(stages),每一個階段包含有一個或多個工序(jobs),好比先購料、組裝、測試、包裝再上線銷售,每一次push或者MR都要通過流水線以後才能夠合格出廠。而.gitlab-ci.yml正是定義了這條流水線有哪些階段,每一個階段要作什麼事。web

5. Badges

徽章,當Pipelines執行完成,會生成徽章,你能夠將這些徽章加入到你的README.md文件或者你的網站。redis

徽章的連接形如:
http://example.gitlab.com/namespace/project/badges/branch/build.svg
咱們用gitlab項目的徽章做爲例子:

sql

安裝配置

這裏跳過Gitlab的安裝,請自行谷歌。可是對於安裝gitlab有一點提醒,就是建議使用官方推薦的集成安裝包的方式安裝,經過源碼安裝會有不少坑踩不完。docker

安裝gitlab-ci-multi-runner

  1. 若是想要使用docker runner,則須要安裝docker。(可選)
    curl -sSL https://get.docker.com/ | sh

由於docker須要linux內核在3.10或以上,安裝前能夠經過uname -r查看Linux內核版本。

  1. 添加Gitlab的官方源:

    # For Debian/Ubuntu
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
    
    # For CentOS
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  2. 安裝

    # For Debian/Ubuntu
    sudo apt-get install gitlab-ci-multi-runner
    
    # For CentOS
    sudo yum install gitlab-ci-multi-runner
  3. 註冊Runner
    Runner須要註冊到Gitlab才能夠被項目所使用,一個gitlab-ci-multi-runner服務能夠註冊多個Runner。

    $ sudo gitlab-ci-multi-runner register
    
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
    https://mygitlab.com/ci
    Please enter the gitlab-ci token for this runner
    xxx-xxx-xxx
    Please enter the gitlab-ci description for this runner
    my-runner
    INFO[0034] fcf5c619 Registering runner... succeeded
    Please enter the executor: shell, docker, docker-ssh, ssh?
    docker
    Please enter the Docker image (eg. ruby:2.1):
    node:4.5.0
    INFO[0037] Runner registered successfully. Feel free to start it, but if it's
    running already the config should be automatically reloaded!
  4. 更新Runner
    若是須要更新Runner,只須要執行如下腳本:

    # For Debian/Ubuntu
      sudo apt-get update
      sudo apt-get install gitlab-ci-multi-runner
      
      # For CentOS
      sudo yum update
      sudo yum install gitlab-ci-multi-runner
  5. Runner高級配置
    經過gitlab-ci-multi-runner register註冊的Runner配置會存儲在/etc/gitlab-runner/config.toml中,若是須要修改可直接編輯該文件。詳見這裏

    concurrent = 4
    check_interval = 0
    
    [[runners]]
      name = "test"
      url = "http://your-domain.com/ci"
      token = "your-token"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "node:4.5.0"
        privileged = false
        disable_cache = false
        volumes = ["/cache"]
      [runners.cache]
      [runners.kubernetes]
        host = ""
        cert_file = ""
        key_file = ""
        ca_file = ""
        image = ""
        namespace = ""
        privileged = false
        cpus = ""
        memory = ""
        service_cpus = ""
        service_memory = ""

到這裏咱們的Runner就安裝配置好了,接下來是對項目根目錄中.gitlab-ci.yml進行配置。

配置構建任務

  1. 在項目根目錄添加.gitlab-ci.yml文件
    關於該文件的各項配置請見

  2. 示例:

    # 這裏使用了我本身的docker image,配置了本身須要的環境
    image: wuyanxin/node
    
    variables:
    MYSQL_DATABASE: wan_ark-unit
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    
    # 關於service請見: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service
    services:
    - mysql:5.6
    - redis:3.2.4
    
    stages:
    - test
    - eslint
    - deploy
    
    before_script:
    - echo 'REDIS_HOST=redis' >> .env
    - echo 'DB_HOST=mysql' >> .env
    - yarn install
    
    test_service:
    stage: test
    script:
    - npm run build
    - npm test
    
    eslint_src: 
    stage: eslint
    script:
    - npm run lint
    allow_failure: true
    
    deploy:
    stage: deploy
    script:
    - echo 'deployd!'
    only: 
    - master

    這裏使用了nodejs項目做爲例子,其餘語言相似語法。

  3. 執行結果
    pipeline 截圖

詳細截圖

最後

這是我最近對於Gitlab CI的實驗記錄,對於Gitlab CI的使用體驗我給82分。雖然在實驗過程當中踩了不少坑,真的踩到差點放棄了,因此記錄一下個人實驗過程,但願對他人有幫助。
關於在這個過程當中踩到的坑以及構建速度優化請關注我下期文章。

參考

  1. https://zh.wikipedia.org/wiki...

  2. https://docs.gitlab.com/ce/ci...

相關文章
相關標籤/搜索