使用gitlab实现CI/CD自动化部署

551 阅读3分钟

说明:本章节主要讲解实际操作部分,对于理论和原理部分待研究和查找资料后,另单独章节讲解。

所需知识点和工具

  1. 一台服务器(轻量级即可)
  2. gitlab账号
  3. 可部署的(前端)项目,如果没有可以准备一些资料上传
  4. linux简单命令
  5. nginx相关知识

服务器装载nginx

  • 为什么要装nginx? 一个(前端)项目部署在服务器上是要通过浏览器可以直接访问的,所以nginx此刻的作用就是将静态资源通过HTTP协议展示给客户的,即HTTP服务器。

  • 如何装nginx?

  1. 去nginx官网下载安装包,在服务器解压配置(此处不做展开讲解)

  2. 从库里直接下载 我的服务器装的系统镜像是Ubuntu20.04,所以我直接从软件源里下载即可,linux命令是:

    - sudo apt update  // 更新本地包索引,以便获得最新的包列表
    - sudo apt install nginx  // 下载nginx
  • 查看nginx页面 nginx安装好后,在浏览器输入ip地址即可查看nginx页面
    - cd /etc/nginx/sites-available  // 查看nginx配置
    - cat default

服务器nginx配置结果:

image.png

浏览器查看结果: image.png

  • 修改配置 nginx默认的端口是80,一般不用80端口作为前端页面展示端口。有时会有一定限制或者占用,所以重新配置端口和自定义存放地址。

image.png

服务器拉取项目

  • 创建仓库 创建一个空仓库,用于存放要部署的项目。也可以将已有项目关联到该仓库地址,进行提交部署。

  • 创建部署令牌 令牌可以使下载 ( git clone) 或推送和拉取项目的包和容器注册表映像,无需用户和密码。

image.png

  • 服务器拉取项目 登录远程服务器,去到先前指定存放项目的目录下,使用令牌克隆项目
    - git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

此时可能会遇到权限不够的问题,需要给目录或者文件夹赋予权限

    - chown -R ubuntu:ubuntu /app
  • 环境搭建 前端项目要运行起来,少不了nodejs 和 npm 。目前ubuntu软件源里node的版本是10.19.0,如果这个版本可以使项目运行起来,则可以直接在软件源里下载
    - sudo apt install nodejs -y

如果需要其他版本的nodejs,则需要从NodeSource 中安装 Node.js 和 npm

    - sudo curl -s https://deb.nodesource.com/setup_16.x | sudo bash -
    - sudo apt-get install -y nodejs

操作者gitlab runner

当有新的代码提交到指定分支时,runner就会执行.gitlab-ci.yml文件,实现自动化部署。服务器安装gitlab-runner。

    - sudo apt install gitlab-runner

注册runner,runner可以分为三种,Shared Runners,Specific Runners和Group Runners。因为我要给当前项目单独使用,所以自己创建runners,使用Specific Runners。

    - sudo gitlab-runner register --url https://gitlab.com/ --registration-token $REGISTRATION_TOKEN

注册时,会让你填写地址和token,以及操作容器。查看gitlab里的设置来填写地址和token,容器选择的是shell。

image.png

编写.gitlab-ci.yml文件

以上全部准备就绪,就要来编写自动化部署的执行文件了。该文件放在项目的根目录下面,配置如下:

    stages:
      - deploy

    deploy:
      stage: deploy
      only:
        - master
      script:
        - cd /app/react-admin
        - git checkout master
        - git pull origin master
        - npm install
        - npm run build

目前这个只是一个简版写法,更多配置要还详细了解.yml文件的写法和步骤,此处不展开说明。

自动化部署

最后一步,当然是实现自动化部署。提交代码到仓库,检测到代码有变动,触发runner执行.gitlab-runner.yml文件,执行自动化部署。

image.png

补坑之路

  1. 未关闭Shared runners

image.png

第一次上传代码没有关闭共享runners,导致没有进自定义的runners。

image.png

2.服务器没有给gitlab-runner用户权限

image.png

执行代码:

    - sudo chown -R gitlab-runner:gitlab-runner .