10分钟搞定gitlab-ci自动化部署

发表于:2019-08-30

最近很多人在群里问 gitlab-ci 部署问题, 所以抽空写了篇文章 包教包会

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins

持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。

概述

在编码完成时都会进行打包发布过程,如果每次都手动操作这一步骤就会浪费时间,效率低下。所以就有了持续集成。

准备事项

请提前安装以下软件,本文不介绍如何安装。

  • gitlab
  • git

配置SSH Key

这一步至关重要,如果已配置可直接跳过。 如果不配置的话每次git pull都会要求输入密码,这样就做不到自动化了。

输入以下命令,一直回车即可。

ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"

查看生成的公钥, 并复制下来

cat ~/.ssh/id_rsa.pub

在gitlab上添加 SSH Key, 至此完成

新建git仓库

这一步可选,如果你已经有项目可直接跳过,只是为了照顾新人

1、在gitlab上新建项目

2、克隆仓库, 服务器和本地机器都要克隆,位置随意。 我把仓库克隆到了 /home/test/

git@localhost:root/test.git

安装 gitlab-runner

1、使用gitlab官方提供的仓库

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2、使用yum进行安装

sudo yum install gitlab-runner

查看Runners配置信息

将 url 和 token复制保存下来,接下来的配置需要用到这2个。

位置 工程项目 -> Settings -> CI/CD -> Runners(点击右侧Expand展开起来就能看到)

url: http://localhost:8088/

token: LquGyHsNbzB2uBBxQMMj

注册gitlab-runner

安装完gitlab-runner还需要进行注册

1、输入以下命令进行注册

sudo gitlab-runner register

2、提示 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

将url粘贴并回车(不要说不知道~)

http://localhost:8088/

3、提示 Please enter the gitlab-ci token for this runner:

token粘贴并回车(不要说不知道~)

LquGyHsNbzB2uBBxQMMj

4、提示 Please enter the gitlab-ci description for this runner:

描述,随便输入

test build

5、提示 Please enter the gitlab-ci tags for this runner (comma separated):

输入标签, 可随意输入, 我就叫做 build

build

6、提示 Please enter the executor: docker, parallels, shell, ssh, docker+machine, custom, docker-ssh, virtualbox, docker-ssh+machine, kubernetes:

这一步根据自己的需求选择,这里选择 shell, 然后回车

shell

注册完成!~

注册 gitlab-ci-multi-runner

这一步和注册 gitlab-runner 一模一样,输入同样的信息即可

sudo gitlab-ci-multi-runner register

运行 gitlab-runner

查看是否运行成功,就在查看配置信息这里, 绿色圆点表示运行成功

如果上述没有运行,就执行这一步,否则跳过

gitlab-runner run

编写 gitlab-ci.yml

在本机项目根目录新建 .gitlab-ci.yml 然后写入:

stages:
    - build

# task-1 名字随意,代表一个工作
task-1:
    stage: build

    # 执行脚本, 这段脚本会在服务器执行
    script:
        - mkdir -p /home/temp_dir

    tags: 
        # 标签名字,注册runner时所填写的tag
        - build
    only:
        # 只有 master 分支才会执行
        - master

提交到远程仓库, gitlab 会侦测项目根目录下是否有 .gitlab-ci.yml, 如果有就会执行内容里面的任务。

查看本次任务是否执行成功, 如果出现 passed 表明成功执行

不过呢,并非都是那么好运气的,有以下几种情况出现:

  • pending 系统资源可能不足
  • canceled 取消执行 或 根目录没有 .gitlab-ci.yml
  • failed 任务失败, 基本上是 .gitlab-ci.yml 编写有误

上面的任务只是每次提交会在 home 目录下新建 temp_dir

如果想每次提交进行自动打包/重启呢?例如node服务端

只要在 script 字段编写一系列命令即可, 或者执行 shell 脚本

stages:
    - build

# task-1 名字随意,代表一个工作
task-1:
    stage: build

    # 执行脚本, 这段脚本会在服务器执行
    script:
        - cd /home/test
        - git pull
        - npm run build
        - pm2 restart all

    tags: 
        # 标签名字,注册runner时所填写的tag
        - build
    only:
        # 只有 master 分支才会执行
        - master

.gitlab-ci.yml 配置信息非常多,可参考 官方yaml配置

gitlab-runner其他命令

运行 gitlab-runner

gitlab-runner run

查看 gitlab-runner 状态

gitlab-runner status

查看注册列表

gitlab-ci-multi-runner list

删除注册信息

gitlab-ci-multi-runner unregister --name "名称"

总结

gitlab-ci 基本上是可以满足大部分自动化部署场景的,如果想功能强大点的可上 jenkins, 如果有问题欢迎加入我们QQ群交流: 99316637

其他