gitlab runner实现自动化部署

2020-03-02  本文已影响0人  AndreaH

前言

GitLab Runner是一个开源的项目,是用来执行GitLab中的项目的根目录下创建的.gitlab-ci.yml 脚本的工具。GitLab-CI可以比喻成管理工人的工厂,Runner是工厂里的工人,每个工人需要在工厂进行注册,所负责的项目不同,所做的工作也不同。当工厂某一个项目发生变动时,需要通知对应的工人去做对应的工作。

具体部署流程图

deploy.png

GitLab Runner简介

1. Runner类型

2. GitLab Runner中相关概念介绍

下图是Gitlab对阶段和阶段状态的展示:


stage.png
stage-status.png

准备工作

  1. 准备gitlab 测试服务器,用于gitlab上的代码存储、CI等的配置
  2. 准备一台部署服务器,用于安装gitlab-ruuner并部署代码

开始Go!

1. 准备gitlab服务器,并创建一个项目

gitlab.png

2. 准备一台部署服务器,用于安装gitlab-ruuner并部署代码

1. 在部署服务器上安装gitlab-runner

# 安装gitlab-runner
yum install gitlab-runner

2. 向GitLab-CI注册gitlab-runner

gitlab-runner register
runner-register.png
  1. url:gitlab所在的测试服务器地址
  2. token:项目的token,用于关联runner和项目
  3. name:runner的名字,用于区分runner
  4. tags:用于匹配任务(jobs)和执行任务的设备(runners),此处不填直接回车时,默认Can run untagged jobs值为true
  5. executor:执行环境

3. 启动gitlab-runner

gitlab-runner run
gitlab-runner install
gitlab-runner start

4. 配置ssh免登录,用于将gitlab-runner服务器上获取到的文件拷贝到服务器

  1. 首先登陆服务器,进入gitlab-runner用户下生成一对公钥,私钥对。生成过程需要两次输密码,直接回车即可。
ssh-keygen -t rsa -C  'your email@domain.com'
  1. 密钥默认保存位置在 ~/.ssh 目录下,打开后会看到私钥文件 id_rsa 和公钥文件 id_rsa.pub


    ssh.png
  2. 复制公钥到你的部署服务器上
scp ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/root/.ssh/id_rsa.pub
  1. 把公钥追加到服务器ssh认证文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

5.此后,从本地上传文件到服务器就不需要输用户名,密码了。
5. 在gitlab中配置变量,用于.gitlab-ci.yml文件

yum.png
##缓存 node_modules/目录 下次构建不会删除
cache:
  paths:
  - node_modules/
stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy
  - build
  - deploy

fetch: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。
  stage: build
  script:
    - echo "=====start build======"
    - npm i 
    - npm run build
    - echo "=====end build======"
  only:
    - master
  artifacts: 
    expire_in: 2 week
    paths: 
      - dist/
    
deploy-static:
  stage: deploy
  script:
    - echo "=====start deploy======"
    - scp -r ./dist root@$DEPLOY_SERVER_DEV:$WEB_DIR
    - echo "=====end deploy======"

6. 把.gitlab-ci.yml文件推送到gitlab仓储,触发流水线

pipeline.png deploy-pass.png
7. 到此,我们已经完成了一套完整对自动化部署,之后只有gitlab仓库有代码更新,就可以触发流水线了
上一篇下一篇

猜你喜欢

热点阅读