基于docker的gitlab-ci搭建使用

这是阿里内网的一篇文章,感有用,故转载来了,自己实际搭建了,故记录一下:

背景
在日常工作中,我们往往会搭建基于jenkins的集成测试环境来保证每次代码功能的正确性,相关jenkins插件也非常丰富,比较适合复杂的集成环境。jenkins虽好,但需要投入人力维护,那有没有一种比较轻量级别的集成工具,答案是肯定的。GitLab自从8.0版本之后,自动集成GitLab-CI功能。那接下来让我们窥探下docker+GitLab-CI结合的集成环境。
GitLab 开启build功能
GitLab项目-》项目设置-》勾选builds选项-》保存。开启后会发现多了几个菜单,打开setting,选择runner,提示Runner安装指令。其中Runner有两种模式:Specific runners 和 Shared runners,如下图:

,其中的token以及URL,后续的注册Specific Runner需要使用。
Specific runners: 这类Runner是被指定为某个project提供构建服务的,这意味着系统中的任何用户,都可以建立自己的Runner,并把它指派给自己的某一个project。
Shared runners: 这类Runner是全局的,意思是为整个GitLab系统范围内的project提供构建服务,只有系统管理员能创建这类Runner。

更多入门信息请参考@许晓斌的文章:http://www.atatech.org/articles/49152
基于docker的GitLab-Muti-Runner安装、启动&注册
准备工作
准备一台已装有Docker engine的ECS机器,由于alidocker不支持CMD,顾以下均原生docker以及Specific Runners为示例进行说明。
安装&启动
docker run -d --name gitlab-runner --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/fanzhong/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest

脚本说明:
/var/run/docker.sock:/var/run/docker.sock:后续docker相关操作有关,务必配置
/home/fanzhong/gitlab-runner/config:/etc/gitlab-runner:mount此文件,方便配置gitlab-runner相关配置以及资源等,建议配置;

注册Runner至GitLab
注册的过程,实际是将Runner与GitLab web端关联起来,其注册过程如下:

docker exec -it gitlab-runner gitlab-ci-multi-runner registerRunning in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):http://gitlab.alibaba-inc.com/ciPlease enter the gitlab-ci token for this runner:xxxxxxxxxxxxxPlease enter the gitlab-ci description for this runner:Please enter the gitlab-ci tags for this runner (comma separated):dockerRegistering runner... succeeded runner=270fa832Please enter the executor: docker-ssh, parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine, docker:dockerPlease enter the default Docker image (eg. ruby:2.1):reg.docker.alibaba-inc.com/aliexpress/spring-boot-start-scripts-ci:no-nginxRunner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

其中的Coordinator URL 和 token来自GitLab。最终GitLab-Runner生成的相关配置config.toml内容如下:
concurrent = 1check_interval = 0[[runners]] name = "spring-boot-scripts" url = "http://gitlab.alibaba-inc.com/ci" token = "xxxxx" executor = "docker" [runners.docker] tls_verify = false image="reg.docker.alibaba-inc.com/aliexpress/spring-boot-start-scripts-ci:no-nginx" privileged = false disable_cache = false volumes = ["/cache"] [runners.cache] Insecure = false

.gitlab-ci.yml
在项目根目录下面添加yml配置文件,内容如下,更多配置信息详见.gitlab-ci.yml
image: reg.docker.alibaba-inc.com/aliexpress/spring-boot-start-scripts-ci:no-nginxbefore_script: - rsync -avz /tmp/builds/spring-boot/startup-scripts/template/bin/* /home/admin/spring-boot-demo-application/bin/ | sed 's/^/ /g' - sed -i "s/template/spring-boot-demo-application/g" /home/admin/spring-boot-demo-application/bin/setenv.sh - rsync -avz /tmp/builds/spring-boot/startup-scripts/cai/* /home/admin/cai/ - sed -i "s/@appName@/spring-boot-demo-application/g" /home/admin/cai/conf/* - chmod u+x /home/admin/spring-boot-demo-application/bin/* /home/admin/cai/bin/nginxctl - chown -R admin:admin /home/admin/*stages: - testjob_no_nginx: stage: test script: - sed -i "s/NGINX_SKIP=0/NGINX_SKIP=1/g" /home/admin/spring-boot-demo-application/bin/setenv.sh - sh /home/admin/start.sh#job_nginx:# stage: test# script:# - sh /home/admin/start.sh# - curl localhost/status.taobao

用户镜像spring-boot-start-scripts-ci:no-nginx
此镜像必须支持CMD命令,否则yml中相关scripts不会运行,内部提供的几个OS基础镜像无法正常运行(alidocker不支持CMD),请基于docker官方镜像构建。
FROM centos:7RUN yum install -y rsync && \yum install -y sudo && \yum install -y unzip && \yum install -y dos2unix && \yum clean all && \sed -i -e 's/Defaults requiretty.*/ #Defaults requiretty/g' /etc/sudoers && \groupadd -g 1000 admin && useradd -u 1000 -g 1000 admin && \rpm -ivh --nodeps "http://yum.tbsite.net/taobao/5/x86_64/current/ajdk-8_0_0-b60/ajdk-8_0_0-b60-1.0.1-282804.el5.x86_64.rpm" && \echo "sudo -u admin /home/admin/spring-boot-demo-application/bin/jbossctl pubstart" > /home/admin/start.sh && \mkdir /home/admin/spring-boot-demo-application /home/admin/spring-boot-demo-application/bin /home/admin/spring-boot-demo-application/logs && \ln -s install/ajdk-8_0_0-b60 /opt/taobao/javaCOPY spring-boot-demo-application___int-hz.tgz spring-boot-demo-application___int-us.tgz app-conf.tgz /home/admin/spring-boot-demo-application/target/VOLUME /home/admin/logs /home/admin/spring-boot-demo-application/logs /home/admin/cai/logsCMD ["bash"]

运行效果


示例代码
.gitlab-ci.yml
Dockerfile
config.toml

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

推荐阅读更多精彩内容