gitee自动部署的使用

本文介绍如何使用gitee的webhook机制实现项目的自动化部署,包括配置git push命令、开发接口以执行git pull及重启服务等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缘起

给朋友做的小项目,托管在gitee上,每次修改都要登录到服务器上执行命令:

git pull

后了解到git的钩子机制,进而发现了gitee的webhook,现在说下这玩意怎么用。

原理

webhook流程图

  1. 本地执行 git push 命令,push代码到gitee的服务器上。
  2. gitee接收到push请求后,调用我们自己的服务器上的一个接口。
  3. 这个接口下的代码来执行 git pull 和重启服务等命令(如果需要的话) 完成代码的部署。

实操

上面的过程中,我们需要做的就是实现一个接口。这个可以完成拉取代码、重启服务等步骤,如果是php开发的应用,只需要pull代码即可。

实现接口

这个接口可以用自己熟悉的语言开发,比如php,python等脚本语言,简单粗暴。

下面我们来用php写一个demo

demo

新建一个叫做build.php的文件,添加一下内容

<?php

$cmdRes = shell_exec('git pull');

echo $cmdRes;

这个文件中,通过 shell_exec 函数直接执行 git pull 命令,达到同步代码的效果。

ps:这份代码并不完善,需要增加来源验证,日志记录,安全验证等逻辑

排坑

执行用户的权限问题

例如php的项目一般是借助php-fpm来处理请求,这时需要注意php-fpm的配置文件中是配置了一个系统用户来执行逻辑的。需要将这个用户的公钥配置到gitee上,如果这个用户还没有配置公钥,可以通过一下命令来生成。

sudo -u [用户名] ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

这里注意下,如果不清楚php-fpm的用户名,可以通过查看php-fpm进程的方式知道名字

[root@local ~]# ps -ef | grep php
root     13715     1  0 7月23 ?       00:00:04 php-fpm: master process (/etc/php-fpm.conf)
apache   13716 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13717 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13718 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13719 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13720 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   15427 13715  0 15:42 ?        00:00:00 php-fpm: pool www
apache   16296 13715  0 16:42 ?        00:00:00 php-fpm: pool www
root     16752 16736  0 18:07 pts/0    00:00:00 grep --color=auto php

我这里的用户名是apache

或者将php代码中要执行的命令修改为

$cmdRes = shell_exec('whoami');
var_dump($cmdRes); exit;

这样调用这个接口也可以知道这个用户名是什么。

最后将公钥配置到gitee上。

文件权限问题

需要将代码的owner全部修改为php-fpm的用户

### Gitee 上实现自动部署的 CI/CD 配置 要在 Gitee 上实现自动部署,通常会借助一些常见的 CI/CD 工具来完成整个流程。以下是关于如何利用 Jenkins 和 Docker 来设置 Gitee 的 CI/CD 流程。 #### 使用 Jenkins 和 Docker 实现 Gitee 自动部署 1. **代码托管平台的选择** 开发人员需要将代码提交至 Gitee 平台作为版本控制管理工具[^3]。这一步骤是后续自动化的基础。 2. **Webhook 设置** 在 Gitee 中配置 Webhook 地址,指向 Jenkins 服务端口。当有新的代码推送时,Gitee 将向 Jenkins 发送通知以触发构建任务。 3. **Jenkins 构建过程** - Jenkins 接收到 Webhook 请求后,从 Gitee 拉取最新的项目源码。 - 利用脚本执行项目的打包操作(如 npm run build 对于前端项目),并生成可运行的应用程序文件或者容器镜像[^1]。 4. **Docker 容器化** 如果目标环境支持 Docker,则可以通过创建自定义的 Dockerfile 文件,在其中指定应用程序所需的依赖项以及启动方式;随后由 Jenkins 负责构建该镜像,并推送到私有的或公共的 Docker Registry。 5. **远程服务器上的部署** Jenkins 可通过 SSH 协议连接到生产环境中的一台或多台主机上,传输已打包好的静态资源或者是完整的容器镜像地址。接着执行一系列命令完成最终的服务更新工作。 6. **反馈机制** 整个 CICD 过程结束后,可以选择性地把成功与否的信息返回给开发者查看,甚至还可以集成即时通讯软件比如钉钉来进行实时消息提醒。 以上描述了一个典型的基于 Gitee、Jenkins 和 Docker 技术栈所构成的连续交付流水线方案概述[^2]。当然具体实施细节可能会因应不同场景下的特殊需求而有所调整变化。 ```bash # 示例:简单的 Jenkins Pipeline Script (Groovy) pipeline { agent any stages { stage('Checkout') { steps { git 'https://gitee.com/<your-repo>.git' } } stage('Build') { steps { sh ''' docker build -t my-app . docker push my-app:latest ''' } } stage('Deploy'){ steps{ sshPublisher( publishers: [ sshPublisherDesc( configName: 'production-server', transfers: [sshTransfer(cleanRemote: true, sourceFiles: '**')], usePromotionTimestamp: false, verbose: true ) ] ) } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值