首页 > 其他分享 >gitee基于webhooks实现前端简单自动化部署

gitee基于webhooks实现前端简单自动化部署

时间:2024-04-15 10:13:51浏览次数:24  
标签:function console log 前端 gitee nginx webhooks event

1.为什么采用自动化部署

简而言之,程序员优秀传统:懒 =>高级生产力.
基于gitee进行的自动化部署,服务器环境为Ubuntu
基于webhooks进行的自动化部署更加轻快便捷

2.部署步骤

1).服务器购买

可以购买阿里云抢占式服务器进行实验,花费应该在一大洋以内,或者直接购买一年低配服务器,一百大洋以内.

  • 实例创建完成之后要配置安全组 => 只有配置了安全组,对应端口才可以访问(80,以及webhooks需要使用的7777端口
    • 进入实例
      image.png

    • 配置安全组
      image.png

    • 加入安全组,选择对应实例
      image.png

    • 配置
      image.png

2).服务器安装一些环境
  • 连接服务器
  • 安装一些环境,例如git,node,pm2
3).gitee创建仓库并配置webhooks
  • 创建仓库,并在服务器端添加ssh连接秘钥
// 服务器端生成秘钥: 
ssh-keygen -t rsa -c "你的邮箱之类的标识用的"  // 不用加双引号
  • 具体如何查看ssh-key,可以自行百度,系统不同略有不同
  • 在gitee添加ssh-key
    image.png
    image.png
  • 给仓库添加webhooks
    image.png
    image.png
4).webhooks代码与sh脚本
echo start build

# 获取最新版代码
git pull

#安装依赖
npm install

# 打包项目
npm run build

echo build end


var http = require('http')
var createHandler = require('gitee-webhook-handler')
var handler = createHandler({ path: '/example', secret: 'example' })
// 上面的 secret 保持和 Gitee 后台设置的一致

function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn
  var child = spawn(cmd, args)
  var resp = ''

  child.stdout.on('data', function (buffer) {
    resp += buffer.toString()
  })
  child.stdout.on('end', function () {
    callback(resp)
  })
}

http
  .createServer(function (req, res) {
    console.log(req.url)
    handler(req, res, function (err) {
      res.statusCode = 404
      res.end('no such location')
    })
  })
  .listen(7777, () => {
// 此端口要和gitee设置的端口号一致
    console.log('WebHooks Listern at 7777')
  })

handler.on('error', function (err) {
  console.error('Error:', err.message)
})

handler.on('*', function (event) {
  console.log('Received *', event.payload.action)
  //   run_cmd('sh', ['./deploy-dev.sh'], function(text){ console.log(text) });
})
// gitee 判断方式
handler.on('Push Hook', function (event) {
  console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref)
 // 此处shell脚本,根据自己编写的文件的文件名来决定
  run_cmd('sh', ['./deploy-dev.sh'], function (text) {
    console.log(text)
  })
})

// github 判断方式
// handler.on('push', function (event) {
//   console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref)
//   // 分支判断
//   if (event.payload.ref === 'refs/heads/master') {
//     console.log('deploy master..')
//     run_cmd('sh', ['./deploy-dev.sh'], function (text) {
//       console.log(text)
//     })
//   }
// })

5).部署

image.png

  • 通过git clone ssh地址 将代码拉下来
  • 测试git pull 是否能够拉取最新代码
  • 通过 pm2 执行webhooks.js(可以先通过node 执行代码进行测试,没问题在通过pm2托管程序)
  • 配置nginx文件
      1. 修改nginx.conf 中的用户为服务器用户即服务器登录名 一般为root
cd /etc/nginx
vi nginx.conf

image.png

  • 2.添加项目配置
cd /etc/nginx/sites-enabled
vi example  // 创建nginx服务配置

server {
    listen       80;
  # 如果有域名,此处可以根据域名进行映射,没有可以不写
    server_name  example.zdzspace.cn;
  // 对应项目打包静态文件所在地址
    root /root/example/dist;
   location /{
       # root /root/www;
      // 当访问 的时候默认直接以dist/index.html 为入口
        index index.html;
      # 该配置能让vue项目刷新后,仍能正常访问页面
        try_files $uri $uri/ /index.html;
 }
}
nginx -s reload // 重新加载nginx
  • 所有操作完成之后,就可以直接通过git push操作自定进行代码打包编译
6).一些问题
  • 端口号占用
lsof -i:端口号  // 查看占用端口号pid
sudo kill -9 pid // 结束对应进程
  • nginx命令
nginx -t // 测试配置文件书写是否有误
nginx // 启动nginx
nginx -s stop // 停止nginx
nginx -s reload // 重启nginx
  • 接收到请求,但是没有执行脚本
    是否对应脚本文件名称写错了
  • nginx 不能启动
    配置文件书写错误

标签:function,console,log,前端,gitee,nginx,webhooks,event
From: https://www.cnblogs.com/coderzdz/p/18135248

相关文章

  • 前端小白学习路线与方法推荐
    0.编辑器推荐1).WebStorm优点:本身功能丰富缺点:体积较大,需要破解,或者购买正版2)VsCode优点:轻量,开源免费缺点:需要插件扩展,才能达到Webstorm的很多功能推荐插件:书写标签,自动补全标签给代码添加颜色,使代码更加易于区分可以直接运行js代码,而不用通过html......
  • [转]写给前端的 react-native 入门指南
    前言本文主要介绍react-native(下称RN)的入门,和前端的异同点文章不涉及功能的具体实现选择优势我们先说说,为什么很多人会选择使用RN、他对应的特性和普通Web的区别前端资源,生态的互通因为使用的语言是JS和react,对于前端来说可以无缝切换,并且他还能......
  • 简单了解前端性能监控
    作为一名开发来讲,以下场景你有没有遇到:点击这个按钮怎么没反应了页面为什么白了怎么一直正在加载很多用户说图片加载不出来......那么有一款性能监控产品太重要了,但是性能相关的东西实在太多了。那么从一个熟悉又陌生的api开始,performance。1.什么是performancemdn上是......
  • 未来的前端框架技术发展趋势
    ​福利开篇推荐老铁们,你们是否平常开发有这样的问题:1.需要公网访问内网的一个服务?2.需要一个开发环境直接支持https,但是弄本地证书既不合法,又很麻烦?3.本地有强劲的服务器,需要对公网提供服务,但是拉宽带既贵,又麻烦?4.有云主机,但同时云主机需要访问内部的服务器?5.......
  • 短视频app源码,一文带你轻松搞懂前端大文件上传思路
    短视频app源码,一文带你轻松搞懂前端大文件上传思路文件上传是我们在平时开发短视频app源码中经常会遇到的业务,如果只是简单的文件上传那还不足以作为项目亮点,而当我们给它加上切片、续传的功能,就不一样了。本文会带大家搞明白这些功能的实现思路,主要聚焦于前端部分,基于Vue3......
  • freemarker 生成前端文件
    Freemarker是一种模板引擎,它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中,List是一种非常有用的数据结构,它允许我们存储一组有序的元素。有时候,我们需要判断一个List是否为空,这在程序设计中有许多应用场景。本文将详细介绍如何使用FreemarkerList判断一个List是否......
  • 前端录屏并保存视频到本地
    API、第三方库使用getDisplayMedia+MediaRecorder+@ozean/set-webm-duration<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-wid......
  • 前端使用 Konva 实现可视化设计器(4)
    给上一章做一个补充,就是实现通过上下左右按键移动所选节点。继续求Star,希望大家多多一键三连,十分感谢大家的支持~创作不易,Star50个,创作加速!github源码gitee源码示例地址通过按键移动节点准备工作给SelectionTool添加两个必要的方法://更新已选位置selecti......
  • pdf在前端网页的显示
    背景:react框架实现插件:pdfjs-dist:"^2.0.943"  (还有其他插件  react-pdf, react-pdf-js,pdf.js都可以尝试一下呢)实现效果:实现代码如下:index.jsximportReact,{useState,useEffect}from'react';import{Spin}from'antd';import{RightOutlined,L......
  • 前端纯原生js数据监控,更新视图
    还没完善好,先记录一部分 binding.js//定义Model类,用于存储数据和监听数据变化functionModel(value=""){this._value=value;//存储数据的值this._listeners=[];//存储监听数据变化的函数}//定义Model类的set方法,用于设置数据的值Model.prototype.set......