Gitlab CI/CD + Nginx 实现自动化集成构建与部署

lxf2023-05-17 02:20:19

上一节 讲了如何在 CentOS 上安装 gitlab,本节讲一下如何实现 gitlab CI/CD。

安装配置 gitlab-runner

执行指令

mwget https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-11.5.1-1.x86_64.rpm

安装

rpm -i gitlab-runner-11.5.1-1.x86_64.rpm

查看版本

gitlab-runner -v

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

注册: gitlab-runner register, 会提示输入URL,

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

这个在仓库的配置的 Runners 里可以查到

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

接下来提示输入 gitlab-ci token,配置里紧挨着刚才的URL的就是Token,粘贴过去回车就可以啦。

一路按照提示输入就行,输入tag为 test-deploy,最后会提示选择哪种执行器 executor:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

看你熟悉哪个啦,这里以 shell为例。

配置好后,需要将gitlab 校验一下

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

在web页面查看一下 runners配置,刚刚的注册runner已经存在啦:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

点击编辑按钮进入runner编辑:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署 勾上图中所示选项让没有打标签的项目也能使用。我这里 打了 test-deploy 的标签。同一个标签的 CI 用的是一个 Runner。

项目build与Nginx部署

先不使用gitlab流水线,自己实现一下该项目的build与nginx部署。

本文准备的项目就是一个vite创建的 vue3 空项目:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

查看他的 package.json:

"scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
}

执行:

yarn build

可以看到打包文件已经生成了:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

接下来就是在 服务器(还以这个CentOS虚拟机为例)上安装一下 Nginx,把打包的文件丢进去就可以了。

Nginx 安装

  • 前置依赖安装
yum -y install gcc gcc-c++ autoconf pcre-devel zlib-devel openssl openssl-devel make automake
yum -y install httpd vim
  • 安装 Nginx
## 用户目录下,下载免安装版 (也可以用 yum)
cd ~
mwget http://nginx.org/download/nginx-1.18.0.tar.gz

## 解压缩
tar zxvf nginx-1.18.0.tar.gz

## 进入安装目录 (你在哪里解压缩的,文件就在哪)
## 配置安装运行目录
./configure --prefix=/usr/local/nginx

## 编译安装
make && make install

## 配置环境变量 (我这里只配置用户级别)
## 在用户主目录下
vim .bash_profile

## 追加
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin

## 保存退出后生效配置
source ./.bash_profile

此时在任意目录下执行:

nginx -v

便可以看到打印的版本号了。

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

启动Nginx

安装完毕,进入Nginx下的sbin目录并启动nginx
cd /usr/local/nginx/sbin
./nginx

配置 Nginx

这里讲 Nginx 只是为了辅助 CI/CD 讲解,配置详细不做过多展开

若是 yum 安装的,配置文件/etc/nginx/nginx.conf 中,我这个是免安装版的,配置文件在 /usr/local/nginx 中:

vi /usr/local/nginx/conf/nginx.conf

按照自己的喜好配置,找对文件目录即可(建议单开一个全局目录):

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

我们把 项目 dist 目录放入对应配置的位置(建议不要在自定义的用户下,不然 CI 使用的账户 会拿不到):

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

按照上一节的讲解,配置了防火墙和虚拟机NAT配置,开通 10087 端口后,在 windows中访问虚拟机这个端口 http://192.168.137.128:10087

Gitlab CI/CD + Nginx 实现自动化集成构建与部署 成功!

配置CI

在项目根目录下创建 .gitlab-ci.yml 文件来编写执行流程。

在编写之前,我们先清楚一个事情,CI/CD 所要完成的工作就是上边我们手动 build 完以后,再把 dist 目录移动到 nginx 配置的目录下并且重启 Nginx,只是变成了流水线自动化部署而已,省去了繁杂的部署工作。

确定流水线分两步:打包 和 部署:

stages:
  - build
  - deploy

流水线是串行执行的,故runner只用一个就可以,yml 中 tags 设置为同一个就行。

我们写一些 build 的脚本测试:

build:
  stage: build
  tags:
    - test-deploy
  only:
    - master
  script:
    - pwd && ls -al
    - npm install --registry https://registry.npm.taobao.org && npm run build
    - cd $CI_PROJECT_DIR && ls
    - cp -r ./dist /home/gitlab-runner/web/backup/ 
  cache:
    paths:
      - node_modules/

最后的 cp 是为了在 deploy 能拿到 build 的文件。cp 的时候别忘了给文件夹权限

推送到 master 后发现 CI 挂了:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

原来是 runner 环境里没有node环境,通过如下脚本来看看runner的执行位置:

before_script:
    - whoami
    - pwd
    - locate npm
    - echo ${PATH}
    - node -v

打印结果:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

可以看到,PATH 里是有我们在服务器上配置的 node 的全局变量的,但是这里读不到。应该是服务器登录账户不同造成的。

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

源 node 我是配置在 root 下的全局变量,而 CI 是跑在自动创建的 gitlab-runner 账户下的,此时只要在runner账户下再安装一次,配置好环境变量就搞定啦。再测试一下:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

可以看到 node 已经拿到,直接上 build:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

可以看到 npm build 成功啦,那么打完包的 dist 要如何部署到服务器上呢?

配置CD

首先进入查看一下 上一步 cp 的公共目录:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

可以看到已经有啦。这样我们就可以在 deploy 阶段处理这些文件了。

复习一下上一节,Nginx 部署目录是:/root/web/dist,我们试着 cp 一下:

deploy:
  stage: deploy
  tags:
    - test-deploy
  only:
    - master
  script:
    - echo "deploy"
    - pwd && ls -al
    - cp -r /home/gitlab-runner/web/backup/dist /root/web/dist

发现读取不了 root 下的目录:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

所以改进一下 Nginx 部署目录:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

修改 deploy:

- cp -r /home/gitlab-runner/web/backup/dist /home/gitlab-runner/web/

此时 10087 端口已经跑不起来了。我们提交一下 CI 再跑一次:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

成功复制过去了。

此时在 windows下再看看:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

成功!

我们改动一下代码提交测试一下:

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

push 到 master 上,等 CI/CD 跑完后刷新网页

Gitlab CI/CD + Nginx 实现自动化集成构建与部署

自动化部署完成!!

小结

  1. 安装 runner
  2. 配置 nginx
  3. 书写 .gitlab-ci.yml
stages:
  - build
  - deploy

build:
  stage: build
  tags:
    - test-deploy
  only:
    - master
  before_script:
    - whoami
    - pwd
    - echo ${PATH}
    - node -v
  script:
    - pwd && ls -al
    - npm install --registry https://registry.npm.taobao.org && npm run build
    - cd $CI_PROJECT_DIR && ls
    - cp -r ./dist /home/gitlab-runner/web/backup/
  cache:
    paths:
      - node_modules/

deploy:
  stage: deploy
  tags:
    - test-deploy
  only:
    - master
  script:
    - echo "deploy"
    - pwd && ls -al
    - cp -r /home/gitlab-runner/web/backup/dist /home/gitlab-runner/web/
  1. 部署目录检查与测试代码
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!