当前位置: 首页 > news >正文

gitlab实现CI/CD自动化部署

gitlab实现CI/CD自动化部署

  • 项目根目录中新增gitlab-ci.yml
  • 在gitlab上查看gitlab-runner配置方法
  • 配置服务器环境
  • 推送代码,触发runner,实现自动构建和部署
  • 参考

gitlab支持通过配置CI/CD实现自动化部署我们的代码项目,主要核心就是配置gitlab-ci.yml文件以及在目标服务器上配置gitlab-runner

项目根目录中新增gitlab-ci.yml

这是我配置前端项目自动化部署的,整体大差不差,大家可自行更加需要,修改对应的script

default:before_script:- echo "start deploy"- echo $CI_COMMIT_REF_NAME# 阶段
stages:- install- buildDev- buildTest- buildProd- deployDev- deployTest- deployProdcache:paths:- node_modules/# 安装依赖
install:stage: install# 此处的tags必须填入之前注册时自定的tagtags:- install# 规定仅在dev、test、prod分支提交时才触发此阶段only:- dev- test- prod# # 规定仅在package.json提交时才触发此阶段# changes:#   - package.json# 执行脚本script:- echo "start install"- rm -rf ./node_modules- npm install# 打包dev分支
buildDev:stage: buildDevtags:- buildDev# 规定仅在dev分支提交时才触发此阶段only:- devscript:- echo "start dev build"- rm -rf ./dist- npm run build:dev# 将此阶段产物传递至下一阶段artifacts:paths:- dist/# 打包test分支
buildTest:stage: buildTesttags:- buildTest# 规定仅在test分支提交时才触发此阶段only:- testscript:- echo "start test build"- rm -rf ./dist- npm run build:test# 将此阶段产物传递至下一阶段artifacts:paths:- dist/# 打包prod分支
buildProd:stage: buildProdtags:- buildProd# 规定仅在prod分支提交时才触发此阶段only:- prodscript:- echo "start prod build"- rm -rf ./dist- npm run build:prod# 将此阶段产物传递至下一阶段artifacts:paths:- dist/# 部署dev项目
deployDev:stage: deployDevtags:- deployDevonly:# 规定仅在dev分支提交时才触发此阶段- devscript:- echo "start deploy Dev"# 删除远端服务器的dist目录下的所有文件- ssh -p 33953 root@17.215.219.70 'rm -rf /home/web/appointment_h5/dist'# 把当前dist目录下的所有文件传输到远端服务器的dist目录- scp -r -P 33953 ./dist root@17.215.219.70:/home/web/appointment_h5- echo "deploy Dev successfully"# 部署test项目
deployTest:stage: deployTesttags:- deployTestonly:# 规定仅在test分支提交时才触发此阶段- testscript:- echo "start deploy Test"# 删除远端服务器的dist目录下的所有文件- ssh -p 33953 root@17.215.219.70 'rm -rf /home/web/appointment_h5/dist'# 把当前dist目录下的所有文件传输到远端服务器的dist目录- scp -r -P 33953 ./dist root@17.215.219.70:/home/web/appointment_h5- echo "deploy Test successfully"# 部署prod项目
deployProd:stage: deployProdtags:- deployProdonly:# 规定仅在prod分支提交时才触发此阶段- prodscript:- echo "start deploy Prod"- pwd# 删除远端服务器的dist目录下的所有文件- ssh -p 33953 root@17.215.219.70 'rm -rf /home/web/appointment_h5/dist'# 把当前dist目录下的所有文件传输到远端服务器的dist目录- scp -r -P 33953 ./dist root@17.215.219.70:/home/web/appointment_h5- echo "deploy Prod successfully"

在gitlab上查看gitlab-runner配置方法

setting~CI/CD
在这里插入图片描述
找到runner
在这里插入图片描述
点击配置指南
在这里插入图片描述
选择要配置服务器对应的系统,并根据提示在服务器上执行对应代码
在这里插入图片描述
以linux为例

  1. 在目标服务器执行下列命令下载gitlab-runner
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
  1. 分配权限执行runner
sudo chmod +x /usr/local/bin/gitlab-runner
  1. 创建一个gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
  1. 安装runner
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
  1. 启动runner
sudo gitlab-runner start
  1. 注册runner
sudo gitlab-runner register --url 你项目的仓库地址 --registration-token runner的token
例子:
sudo gitlab-runner register --url https://www.gitlab_abc.com/ --registration-token GR1348941mpAA965843DD8vpX

备注:这一步需要你输入项目描述、tags、以及部署的执行方式,大家根据情况自己填写,我选择的tags是buildDev, buildProd, buildTest, deployDev, deployProd, deployTest, install,执行方式是shell

  1. 执行完成之后,在仓库的CI/CD上就会出现一个runner

在这里插入图片描述

配置服务器环境

  1. nginx配置
  2. 创建打包后的代码存放地址
  3. 一些项目的启动环境,比如node之类的

推送代码,触发runner,实现自动构建和部署

向gitlab-ci.yml指定的分支推送代码,gitlab就会监听仓库指定分支的变化,从而触发runner,执行gitlab-ci.yml上的script脚本,这样就会把项目自动部署到服务器上
在这里插入图片描述
在这里插入图片描述
点击每一个节点进程,可以看到具体的执行日志输出
在这里插入图片描述
服务器上已经可以看到打包好并传输到指定目录的代码了
在这里插入图片描述

参考

https://www.cnblogs.com/05-hust/p/18081574
https://www.jianshu.com/p/8376ef8bafa6
https://blog.csdn.net/biubiubiuPlus/article/details/136644029
https://blog.csdn.net/weixin_39246554/article/details/130749673
https://www.jianshu.com/p/8376ef8bafa6
https://blog.csdn.net/yuan_jiaoyoung/article/details/131789769
https://blog.csdn.net/Mrxiao_bo/article/details/138863594
https://juejin.cn/post/6967570299336261646
https://www.jianshu.com/p/fd00a9cc87ef
https://blog.csdn.net/qq_30273575/article/details/127847751
https://www.jianshu.com/p/8d0a75dbd801
https://www.cnblogs.com/imgss/p/13746878.html
https://juejin.cn/post/6967570299336261646
https://blog.csdn.net/qq_40699305/article/details/82753506
https://juejin.cn/post/7037022688493338661

相关文章:

  • Kafka 的 ISR 机制
  • 并查集..
  • 智启万象|挖掘广告变现潜力,保障支付安全便捷
  • 集成高精度16bit模数转换ADC电路的两通道测量高精度电容调理芯片 - MDC02
  • C盘磁盘空间不足:VirtualBox的锅
  • 代码随想录 day 39 动态规划 打家劫舍
  • Adobe PhotoShop - 制图操作
  • 【计算机网络——分组延时,丢失,吞吐量】
  • 2024做一个网站要多少钱?
  • 【面试宝典】java多线程面试题总结(中)
  • 学习笔记第二十四天
  • 2024牛客暑期多校训练营7
  • 在IntelliJ IDEA中利用Git拉取项目
  • Midjourney技巧-生成拟人化动物(做你的品牌形象代言人)
  • 代码随想录算法训练营第十五天(一)| 110.平衡二叉树 (优先掌握递归)257. 二叉树的所有路径
  • 78. Subsets
  • CentOS从零开始部署Nodejs项目
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JAVA SE 6 GC调优笔记
  • javascript面向对象之创建对象
  • Laravel Telescope:优雅的应用调试工具
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • ReactNative开发常用的三方模块
  • React系列之 Redux 架构模式
  • Vue全家桶实现一个Web App
  • 测试如何在敏捷团队中工作?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 理解在java “”i=i++;”所发生的事情
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 深度解析利用ES6进行Promise封装总结
  • 使用putty远程连接linux
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 世界上最简单的无等待算法(getAndIncrement)
  • 用Canvas画一棵二叉树
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 中文输入法与React文本输入框的问题与解决方案
  • 阿里云ACE认证学习知识点梳理
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Spring Boot 分片上传文件
  • ​什么是bug?bug的源头在哪里?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #QT项目实战(天气预报)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (3)llvm ir转换过程
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)