gitlab CI环境搭建

gitlab CI环境搭建

摘要:主要记录基于docker 的gitlabci环境搭建步骤和示例,顺带介绍相关的基本概念.

基本概念

  • CI

From wiki

In software Pipeline
一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。engineering, continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day.Each check-in is then verified by an automated build, allowing teams to detect problems early.

  • pipeline: 一个完整的构建任务, 可以包括多个流程, 如安装依赖、运行测试、编译、部署等流程
  • Stages: 构建阶段,pipeline中提及的若干流程
  • Jobs: 表示构建作业任务,某Stage中执行的作业
  • GitLab Runner: 实际的构造pipeline执行者, 以下会有详述
  • .gitlab-ci.yml: 项目根目录下描述CI pipeline执行的文件, 见相关小节

prerequisites

本文主要关注基于docker(k8s暂未搭建)搭建gitlab CI环境. 需要先搭建好docker(或k8s)相关环境:

Install gitlab

  • docker 安装启动gitlab
sudo docker pull gitlab/gitlab-ce:latest
sudo docker run --detach \
    --hostname localhost \
    --network=host \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /tmp/gitlab/config:/etc/gitlab \
    --volume /tmp/gitlab/logs:/var/log/gitlab \
    --volume /tmp/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

# if error occurred: 
# Failed asserting that mode permissions on "/var/opt/gitlab/git-data/repositories" is 2770
mkdir -p /tmp/gitlab/data/git-data/repositories
sudo chmod g+s /tmp/gitlab/data/git-data/repositories
docker exec -it gitlab update-permissions

参数说明:
--hostname: 设置容器的hostname
--network: 设置容器运行的网络模式, 此处为host模式, 主机网络.
--publish-p: 端口映射转发规则(本地80:容器Http访问端口, 本地443: Https访问端口, 本地端口22: ssh)
--name:容器名称
--restart always:crash或机器启动后总要重启
--volume or -v: 文件目录或磁盘挂载, (/tmp/gitlab/data: app data,/tmp/gitlab/logs: 日志路径,/tmp/gitlab/config: 配置文件)
-e:配置环境变量

  • 可修改ssh端口(默认22如果已经占用, 修改为30102), /tmp/gitlab/config/gitlab.rb: gitlab_rails['gitlab_shell_ssh_port'] = 30102

  • 本地环境修改modify URL

    • sudo hostname gitlab.test.com
    • 修改/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
    • /etc/gitlab/gitlab.rb
  • 浏览器访问url, 注册填写root用户密码, 这里因为默认邮箱是无法使用的, 直接设置密码后用root登录即可.

http://localhost:80
初次见面

创建项目

  • 见上图, 先创建一个组devops, 设置权限后再建立项目citest(略)

CI pipeline

see gitlabci

Starting from version 8.0, GitLab Continuous Integration (CI) is fully integrated into GitLab itself and is enabled by default on all projects.

配置 CI/CD

增加 .gitlab-ci.yml

  • 在项目根目录下(比如我的是$GOPATH/src/gitlab.test.com/devops/citest)
  • a demo gitlab-ci.yml file
image: alpine:latest
lint:
  script: "echo lint"
test:
  script: "echo testing"
  • 其中image,script是保留字(reserved keywords), image是构建项目需要使用的基础镜像, script 是CI要执行的脚本命令的意思, 类似其他保留字:

extends, stage, services, image, before_script, after_script, artifacts, environment, variables, parellel等, 下篇准备对此做个总结, 其实gitlab官网说明挺详细的.

配置docker gitlab Runner

# https://docs.gitlab.com/runner/install/docker.html
mkdir -p /tmp/gitlab-runner/config
docker pull gitlab/gitlab-runner
docker run -d --network=host --name gitlab-runner --restart always \
  -v /tmp/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest
  
# register a runner interactively, 交互式注册
docker exec -it gitlab-runner /bin/bash
gitlab-runner register --help
gitlab-runner register

# 注册填写url/token/name/executer/tag等, 从项目settings拷贝url跟toker创建一个专有runner
copy url && token from http://gitlab.test.com/devops/citest/settings/ci_cd
# http://192.168.1.101/admin/runners
# docker中不要用localhost
# executor 这一步使用 docker

# The token can be found in /etc/gitlab-runner/config.toml
grep "token" /etc/gitlab-runner/config.toml

# stop
docker stop gitlab-runner && docker rm gitlab-runner
docker run --rm -t -i -v /tmp/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "https://gitlab.test.com/" \
  --registration-token "PROJECT_REGISTRATION_TOKEN" \
  --description "docker-runner" \
  --tag-list "docker" \
  --run-untagged \
  --locked="false"``

注意: url与token来自这里:

settings->CI/CD->Specific Runners

  • delploy runner in k8s (来自网上, 未验证)

# deployment.yml

# docker run --rm -t -i alpine sh -c "apk add --no-cache curl; curl -X POST -I http://gitlab.test.com/api/v4/runners"
#!/bin/bash -x
# docker run --rm -t -i -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
# One-line registration command
token="Y9xTAzfiGmvWjGjSP9SV"
if [ $# -gt 1 ];then
    token=$1
fi

docker run --rm -t -i --network=host -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --url "http://gitlab.test.com/" \
  --registration-token ${token} \
  --description "docker-search-engine-runner" \
  --executor "docker" \
  --tag-list "sfd,tsfd,gpu" \
  --run-untagged \
  --locked="false" \
  --docker-image alpine:latest

tips

  • 使用tag在.gitlab-ci.yml中指定runner
  • image指定docker 镜像
  • services 指定需要访问的服务
  • gitlab unregister --all-runners

references

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容