记录一条属于本身的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个小时的时间去等待下载, 最后发现,下载失败,啊哈哈哈哈.

相关文章
相关标签/搜索