使用Gitlab-Runner Docker 构建 node 项目

持续集成概念

在我们编写好了源代码之后,我们需要编译,打包,发布到服务器,我们的软件才可以使用。持续集成就是指的这一系列的操作,本文将介绍gitlab-ci它基于gitlab

Gitlab-CI介绍

Gitlab-CI是Gitlab官方提供的持续集成服务,在仓库的根目录下新建.gitlab-ci.yml文件,并且在gitlab中配置runner,在之后的每次提交合并中将会触发构建

安装Gitlab Runner

这是官方安装文档,由于墙的原因,yum apt-get等可切换到国内镜像,或使用vpn shaodowsocks

安装完之后会有两个命令gitlab-ci-multi-runnergitlab-runner,本文只构建一个runner作为例子,使用gitlab-runner为例

配置Gitlab Runner

要在gitlab中添加一个runner,只需要执行

## 注册runner  会以引导的方式询问相关参数的设置
gitlab-runner register

runner可以设置多个executor

  • shell
  • docker
  • docker-ssh
  • ssh

本文以node项目为例(其他项目同理),要构建一个node项目需要一台装有node并且需要npm使用国内镜像,甚至需要全局安装一些包(如:gulp,webpack),这时候如果有一个已经安装好环境的docker镜像将可以快速的在一台机器上部署,本文使用docker形式注册runner

$ sudo gitlab-runner register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
## 输入你的gitlab地址  
Please enter the gitlab-ci token for this runner
## gitlab的token(在gitlab的Admin Area中) 或者仓库的token(仓库->设置->Runner)
Please enter the gitlab-ci description for this runner
## Runner描述信息
Please enter the gitlab-ci tags for this runner (comma separated):
## Runner的标签 可以指定仓库 只使用固定标签的Runner构建
Please enter the executor: parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, kubernetes:
docker  ## 这里我们选择docker
Please enter the Docker image (eg. ruby:2.1):
your-image  ##拥有你的编译环境的镜像
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

执行成功之后你可以通过gitlab-runner list查看到你注册的runner,可以看到每一个runner的配置信息都可以在ConfigFile中看到(/mypath/.gitlab-runner/config.toml)

## 查看已经注册的runner
$ gitlab-runner list

Listing configured runners                          ConfigFile=/mypath/.gitlab-runner/config.toml

注册成功之后就可以在gitlab的页面上看到你的Runner了

type有两种

  • shared 所有仓库都可以使用
  • specific 只有指定的仓库可以使用

type的类型由执行 gitlab-runner register命令填入的token决定

有时候runner会连接不上,或者在仓库->设置->runner里呈灰色,这有可能是runner机器上没有启动gitlab-runner run引起的,可以执行ps -ef | grep gitlab看看是否存在gitlab-runner run的进程,如果没有则执行gitlab-runner run &该命令会启动runner服务,从gitlab拉去的代码将被放在执行目录下

配置.gitlab-ci.yml

##你在register中使用的镜像名
image: my-node-image
##缓存 node_modules/目录 下次构建不会删除
cache:
  paths:
  - node_modules/
## 任务名称 构建命令
all_tests:
  script:
   - pwd
   - npm install
   - gulp
   - scp -r ./file  xxx@192.x.x.14:/dist/path

上述命令在runner执行的时候会去仓库拉去镜像,如果镜像找不到则使用本地的,所以确保runner的机器有相关镜像
命令我们看到了scp,但是命令实际是运行在docker中的,所以scp会失败,这时候我们需要添加ssh验证,可以参考gitlab-runner ssh配置

只需要在仓库的设置中添加参数SSH_PRIVATE_KEY值为ssh的密钥即可

上述脚本应该变为如下

## 写入密钥 并配置 ~/.ssh/config 文件
before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\\n\\tStrictHostKeyChecking no\\n\\n" > ~/.ssh/config'
##你在register中使用的镜像名
image: my-node-image
##缓存 node_modules/目录 下次构建不会删除
cache:
  paths:
  - node_modules/
## 任务名称 构建命令
all_tests:
  script:
   - pwd
   - npm install
   - gulp
   - scp -r ./dist  xxx@192.168.1.1:/publick/path

至此我们构建好了一个runner,它会在每次仓库有新的提交时执行 gulp构建,并把构建好的/dist目录拷贝到192.168.1.1/publick/path

.gitlab-ci.yml还有很多配置,可以指定有哪些分支变动或者标签时才会去构建,可以参考.gitlab-ci.yma配置

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,523评论 15 147
  • 一、持续集成(Continuous Integration) 要了解GitLab-CI与GitLab Runner...
    tsyeyuanfeng阅读 97,919评论 17 134
  • 这是阿里内网的一篇文章,感有用,故转载来了,自己实际搭建了,故记录一下: 背景在日常工作中,我们往往会搭建基于je...
    新强吖阅读 5,948评论 0 4
  • 如果文章对你有帮助,请点喜欢并关注,这将是我最大的动力。 通过百度的源代码为例,来介绍html的基础布局 1.百度...
    光哥很霸气阅读 931评论 5 6