使用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配置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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