背景: 一次偶然的机会看到了其它项目组强大的GitLab流水线, 想起本身天天还要手动打镜像作一些重复性工做,瞬间眼红. 这不就是我想要的流水线吗.凑巧项目组决定把代码迁移到公司的机器上, 那就借着这个机会把gitlab弄完整吧.html
.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-runnernode
.gitlab-ci.yml
脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。GitLab Runner 不须要和Gitlab安装在同一台机器上,可是考虑到GitLab Runner的资源消耗问题和安全问题,也不建议这二者安装在同一台机器上。
Pipelinesgit
.gitlab-ci.yml
中的不一样阶段的不一样任务。
.gitlab-ci.yml
正是定义了这条流水线有哪些阶段,每一个阶段要作什么事。
在此次搭建过程当中, 我使用的是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个小时的时间去等待下载, 最后发现,下载失败,啊哈哈哈哈.