記錄一條屬於本身的gitlab流水線

背景: 一次偶然的機會看到了其它項目組強大的GitLab流水線, 想起本身天天還要手動打鏡像作一些重複性工做,瞬間眼紅. 這不就是我想要的流水線嗎.湊巧項目組決定把代碼遷移到公司的機器上, 那就藉着這個機會把gitlab弄完整吧.html

名詞: 

  • .gitlab-ci.yml
GitLab CI使用 YAML (發音 /'jæməl/ )文件( .gitlab-ci.yml)進行項目配置。它放置在存儲庫的根目錄中,幷包含如何構建項目的定義。關於YAML文件的書寫格式, 這裏不展開敘述,附上阮一峯老師的 YAML教程。詳細.gitlab-ci.yml文件的書寫能夠參考 官方教程,如下是我在項目中所用到的簡單配置。
image: docker:stable

before_script:
- echo http://mirrors.ustc.edu.cn/alpine/v3.6/main > /etc/apk/repositories; echo http://mirrors.ustc.edu.cn/alpine/v3.6/community >> /etc/apk/repositories
- apk update
- apk add --update git bash
- docker login -u yourName -p yourPas yourDockerIp

stages:
  - test
  - build_docker
  - cleanup_build

test:
  stage: test
  allow_failure: true
  cache:
    paths:
    - node_modules/
  script:
    - apk add --update nodejs nodejs-npm
    - npm install --registry=http://192.168.130.131:9090
    - npm test
  only:
    - branches

build_docker:
  stage: build_docker
  retry: 2
  script:
    - apk add bash
    - bash build-docker.sh
  only:
    - dev
    - master
    - release
    - /^hotfixes-\d.\d.\d$/
  cache:
    paths:
    - node_modules/

cleanup_build_dicker:
  stage: cleanup_build
  retry: 2
  when: on_failure
  script:
    - CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} bash build-docker.sh
  only:
    - branches
     - dev
     - master
     - release
複製代碼

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

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

下面咱們開始正式安裝

1. 搭建私有GitLab:

在此次搭建過程當中, 我使用的是ubuntu虛擬機, 進入虛擬機一套命令下來以後,也就安裝得差很少了,大部分時間仍是在谷歌以及嘗試各類方法 。比較幾個教程以後, 也找到了比較適合個人方法sql

for ubuntu

添加 GitLab 鏡像源並安裝curl -sS http://packages.gitlab.com.cn/install/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce
配置並啓動 GitLab
sudo gitlab-ctl reconfigure複製代碼

接下來經過域名就能夠訪問咱們的GitLab了, 第一次訪問會要求初始化管理員密碼, 設置完成以後, 系統會重定向到登陸頁面, 默認管理員帳號爲root, 登陸以後, 就能夠修改管理員帳號爲本身喜歡的帳號了docker

2.安裝gitlab-runnershell

最初安裝時,我選用了官方提供的安裝方法, 一頓操做以後, 發現並很差用(必定是我打開的方式不對).因而我默默打開了萬能的谷歌, 最後選擇了安裝gitlab-ci-multi-runner.這裏依然仍是一堆命令,默默等待它下載吧.詳細介紹參考這位網友的文章npm

1.添加Gitlab的官方源:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
2.安裝
sudo apt-get install gitlab-ci-multi-runner
3.註冊
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! 複製代碼

在第3步註冊過程當中, 會填一些信息,按提示一直往下走就好了,其中toker能夠在咱們的gitlab管理員主頁得到 ip/admin/runners.ubuntu


配置完成以後, 還須要在頁面底部編輯runner, 將runner 與項目關聯,關聯以後才能運行流水線.
segmentfault


至此, 咱們離配置runner還差最後一步:爲項目設置runner.進入項目的CI/CD設置界面(Settings => CI/CD => Runners), 找到剛剛關聯好的runner, 激活便可.安全

完成這步以後, 項目就能夠順利開始跑流水線啦.當項目分支有代碼更新時, 就能看到咱們在.gitlab-ci-yml中定義好的任務當前所處狀態.

遇到的坑:

安裝GitLab時, 遇到錯誤

There was an error running gitlab-ctl reconfigure:

execute[/opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8] (postgresql::enable line 80) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of /opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8 ----
STDOUT: The files belonging to this database system will be owned by user "gitlab-psql".
This user must also own the server process.
STDERR: initdb: invalid locale settings; check LANG and LC_* environment variables
---- End output of /opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8 ----
Ran /opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8 returned 1複製代碼

在全棧leader的指導下, 修改/etc/default/locale文件, 添加如下兩行配置重啓以後果真很香.

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"複製代碼

還有就是docker in docker 的問題, 在runner中每次都安裝一個docker顯然不太現實, 因此咱們用了外部docker的方式, GitLab官方也給出了相應教程.

在安裝過程當中, 下載部分資源很是慢, 必定要切換到國內鏡像源!!!附上中國科技大學的鏡像源

echo http://mirrors.ustc.edu.cn/alpine/v3.6/main > /etc/apk/repositories; echo http://mirrors.ustc.edu.cn/alpine/v3.6/community >> /etc/apk/repositories
複製代碼

運行一段時間後, runner會生成很是多image佔滿內存, 可使用docker images查看當前鏡像狀況.須要清理移除沒必要要鏡像.建議增長定時任務,按期清理鏡像

  • 移除鏡像

docker rmi $(docker images | grep 'dev.k2data.com.cn:5001')複製代碼
  • 定時任務腳本

    #!/bin/sh
    p=`df / | awk '{print $5}' | grep -Eo '[0-9]+' `
    if p > 85; then
      docker rmi $(docker images | grep 'dev.k2data.com.cn:5001')
    fi
    複製代碼

備份

gitlab-rake gitlab:backup:create
複製代碼

總結:

此次的gitlab流水線搭建之旅, 在leader以及幾位運維同事的幫助下, 也算是基本能用了,因爲知識面太窄, 過程當中大部分時間都在查資料看文檔,不斷測試.確實是開卷有益, 想起了高中物理老師說的那句話:"多讀點書總不可能把人讀壞吧".

整個流程弄下來發現並非太難,命令也很少.但在安裝以前,須要靠本身網上去搜各類教程, 中途也會出現千奇百怪的錯誤,每一個步驟均可以單獨出一個教程.咱們須要一篇篇看完教程,甄選出最適合本身的.這是最花費時間的地方.另外一個比較費時間的點就是測試和安裝依賴, 有時可能會花費1個小時的時間去等待下載, 最後發現,下載失敗,啊哈哈哈哈.

相關文章
相關標籤/搜索