I-team博客的gitlab-runner持续集成实践

做为一个略微看过nodejs语法,但又不懂nodejs的攻城狮,搭建hexo环境很是麻烦,要考虑到翻墙、版本兼容等问题。于是乎,博主每换一个电脑,为了能继续发博客,都需要在新电脑上花一天时间重新搞一下 hexo 环境,楼主感觉还是有简洁的方案来实现我一提交代码就可以自动发布博客,不需要再手动操作一波,这样岂不美哉。so,也就有了今天的经历,代码可以持续集成,博客也可以。楼主的解决方案是使用gitlab与gitlab-runner实现博客部署的持续集成,效果真的不要太好。

持续集成工具 gitlab-runner 介绍

gitlab-ci全称是gitlab continuous integration的意思,也就是持续集成。中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。而gitlab-runner 是 gitlab 提供的持续集成工具。

简单的说,要让CI工作可总结为以下几点:

  • 在仓库根目录创建一个名为.gitlab-ci.yml 的文件。
  • 为该项目配置一个runner服务,楼主这里使用的是使用gitlab提供代码厂库,在自己的腾讯云服务器上运行gitlab-runner服务。
  • 完成上面的步骤后,每次push代码到Git仓库, runner就会自动开始pipeline。

gitlab-ci的具体部署流程如下图所示(图来自网络,侵权删)

Hexo 博客环境迁移

迁移前版本控制

其实每个nodejs工程根目录下都有一个package.json文件,里面都包含了我们所用的插件信息,只需要我们在安装插件的时候注意加上–save,就会自动把插件信息保存到 package.json 中。

如果目录下没有 package.json 文件也不要紧,在跟目录命令行中运行 npm init 即可生成。

博客环境安装

前面做好版本控制,那接下来的事情就好做了。

  1. 备份你的代码,注意:代码中不需要包含 node_modules 文件夹了
  2. 先在新电脑中装上 nodejs 环境
  3. 由于国内安装 npm 的一些插件需要翻墙,所以这里直接用淘宝镜像:cnpm,安装方法:npm install -g cnpm –registry=https://registry.npm.taobao.org
  4. 安装hexo客户端:cnpm install hexo-cli -g
  5. 新建博客目录:hexo init
  6. 把你备份的代码放到此目录下,如果有重复的文件直接覆盖就行
  7. 安装 hexo 插件:cnpm install 就这样,新的博客环境迁移完成了,执行 hexo s 开始你新的博客征程吧!

gitlab-runner环境搭建

gitlab-runner的安装

使用gitlab官网提供的下载地址太慢,所以找到了一个国内的镜像地址:

  1. 新建 gitlab-ci-multi-runner.repo touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo
  2. 将以下内容写入文件
[gitlab-ci-multi-runner]
name=gitlab-ci-multi-runner
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
  1. 执行
sudo yum makecache
sudo yum install gitlab-ci-multi-runner
  1. 以上是楼主在centos上的安装过程,其他系统版本的安装请移步gitlab-runner其他系统版本的安装

gitlab-runner注册到gitlab官网

在终端输入gitlab-runner register 会出现以下过程:

[root@localhost ~]# gitlab-runner register
Running in system-mode.                            

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
your gitlab-ci token
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
your tag
Whether to run untagged builds [true/false]:
[false]: true
Registering runner... succeeded                     runner=c5552857
Please enter the executor: parallels, shell, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, ssh, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

在注册过程中有两个比较重要的参数一个是gitlab的URL,另一个就是注册的token,这两个参数可以在gitlab上找到,过程是Settings>CI/CD>Runners settings>Specific Runners,如下图所示

另外还需要打开

要是自己注册的gitlab-runner生效还学要禁用Shared Runners

以上过程是楼主在centos上操作的,其他版本请移步gitlab-runner注册到gitlab

创建.gitlab-ci.yml,并放着工程的根目录下

.gitlab-ci.yml具体配置请移步官方文档,下面给出楼主使用的.gitlab-ci.yml具体内容

variables:
  GIT_STRATEGY: none

stages:
  - build_and_deploy

job:
  stage: build_and_deploy
  script:
    - cd /opt/I-team-fly
    - git pull --tags origin dev
    - hexo clean
    - hexo g
    - hexo d
  only: 
    - dev

查看gitlab上的构建结果

小结

当然这个过程中还是要涉及到几次使用ssh-key来设置免密登录,楼主就不在这里赘述了,请遇到问题的小伙伴自行Google。

参考文章

作 者:haifeiWu、ChanghuiN 原文链接:http://www.hchstudio.cn/article/2018/29b5/ 版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

Llinux文件目录权限及chmod命令简析

这些天,在互推联盟群(344134224 )遇到几例关于 WP 升级失败以及 FTP 账号登陆的问题。最终发现都是主机的目录权限设置存在问题。比如,博友【PPT...

46460
来自专栏企鹅号快讯

那些实用的Nginx规则

1. 概述 大家都知道Nginx有很多功能模块,比如反向代理、缓存等,这篇文章总结下我们这些年实际环境中那些有用的Nginx规则和模块,大部分是用法的概括及介绍...

26650
来自专栏云计算教程系列

在Ubuntu 16.04如何使用Percona将MySQL类别的数据库备份到指定的对象存储上呢?

数据库通常会在您的基础架构中存储一些最有价值的信息。因此,在发生事故或硬件故障时,必须具有可靠的备份以防止数据丢失。

15930
来自专栏Java工程师日常干货

理解数据库连接池底层原理之手写实现前言对数据库连接池的一点思考写一个迷你版数据库连接池

数据库连接池的基本思想是:为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子...

6810
来自专栏散尽浮华

nginx的web缓存服务环境部署记录

web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问...

48670
来自专栏北京马哥教育

linux下用tar进行数据备份

豌豆贴心提醒,本文阅读时间7分钟 本机上数据的手工备份 Linux系统上配有功能强大的tar命令,可以灵活地备份数据。 tar最初是为了制作磁带备份而设计的把...

33880
来自专栏小明plus

在2018年如何优雅的开发一个typescript语言的npm包?

很多时候,我们可能想要用 typescript 语言来创建一些模块,并提交到 npm 供别人使用,

1.4K110
来自专栏企鹅号快讯

Linux系统下常用的数据备份方法

Linux作为网络操作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。本文将介绍在Linux系...

23880
来自专栏MongoDB中文社区

使用mlaunch和m快速搭建MongoDB测试集群

不知道大家在使用MongoDB的时候有没有遇到突然想要一个集群但是手边又没有的时候?特别是我已经升级到4.0了,突然想要一个3.2的集群怎么办?然后去下载,改配...

12210
来自专栏racaljk

静态库(.a)与动态库(.so)的简明介绍

gcc有很多关于静态库,动态库的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态库和动态库都是应需而生,只要有...

18750

扫码关注云+社区

领取腾讯云代金券