使用码云,GitHub进行版本控制,并通过WebHook进行自动部署

我们通常需要在 PUSH 代码到远程仓库时,线上环境会自动进行代码同步,这时候就需要用到WebHook,它会自动回调我们设定的http地址。

通过请求我们自已编写的脚本,来拉取代码,实现与远程仓库代码的同步。

一、我们先创建一个本地仓库

echo "# 测试" > README.md
git init
git add README.md
git commit -m "test"

在码云或 GitHub 上创建一个空仓库,比如:test,然后让本地仓库与远程仓库关联。

git remote add origin https://gitee.com/xxx/test.git
git push -u origin master

  

二、在本地仓库,添加WebHook文件,并提交到版本库

码云版:

<?php
$data = json_decode(file_get_contents(‘php://input‘), true);

// 码云WebHooks中配置的密码
$password = "123456";

// 你本地的项目路径
$path = "/data/wwwroot/test";

// 判断密码
if ($data[‘password‘] === $password) {
    echo shell_exec("id -a");
    echo shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");
    exit();
}

http_response_code(404);

GitHub版:

<?php

// GitHub项目 Settings/Webhooks 中的 Secret
$secret = "123456";

// 你本地的项目路径
$path = "/data/wwwroot/test";

// 验签
$signature = $_SERVER[‘HTTP_X_HUB_SIGNATURE‘];

if ($signature) {
    $hash = "sha1=" . hash_hmac(‘sha1‘, file_get_contents("php://input"), $secret);
    if (strcmp($signature, $hash) == 0) {
        echo shell_exec("id -a");
        echo shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");
        exit();
    }
}

http_response_code(404);

  

三、登陆线上服务器,为用户生成 SSH 秘钥,并配置码云或GitHub的项目公钥。

配置公钥主要的作用是免去每次 git 操作时需要输入密码。

注意,这里,我们要为 www 用户或 nobody 用户生成 ssh 秘钥,别搞错了。webhook 调用时,是 php 脚本当前执行的用户。

具体是哪个用户可以通过 echo shell_exec(‘id -a‘); 来查看。

sudo mkdir -p /home/www/.ssh
sudo chown -R www.www /home/www/.ssh
sudo -Hu www ssh-keygen -t rsa

一路回车,直到结束,系统会在用户的家目录,生成 id_rsa 和 id_rsa.pub 两个文件,即 id_rsa 密钥 和 id_rsa.pub 公钥。

cat /home/www/.ssh/id_rsa.pub

然后在 码云 项目管理 -> 公钥管理 -> 添加公钥 ,把 id_rsa.pub 中的内容添加。

在GitHub 账号 -> Setting -> SSH and GPG keys ,把 id_rsa.pub 中的内容添加。

然后分别在码云和 GitHub 项目配置WebHook,注意地址必须能外网访问的。

四、登陆线上服务器,并使用 ssh 协议 clone 项目

注意,我们配置了项目的 ssh 公钥,拉取项目要走 ssh 协议,而不是 https。

git clone [email protected]:xxx/test.git

修改权限,注意你PHP运行时的用户是谁,一般为www,也有可能是 nobody

sudo chown -R www .
sudo chmod -R g+s .
sudo -u www git pull

  

五、在本地提交文件,就可以看到代码自动同步到线上服务器了。

原文地址:https://www.cnblogs.com/jkko123/p/11620367.html

时间: 2024-10-09 00:05:07

使用码云,GitHub进行版本控制,并通过WebHook进行自动部署的相关文章

代码管理git托管到码云(github)开源中国

1.注册码云账号https://git.oschina.net/signup 2.登陆码云,账号cjq685286 3.新建项目 4.创建项目 5.项目创建成功 6.使用myeclipse2014将测试项目分享 右键项目->team->Share Project 7.Finish完成之后,项目会发生一些变化.表示我们没有将数据提交到仓库中,下面将代码提交到本地仓库. 右键项目->team->Commit 8.提交后本地项目名称后面会出现master,项目中会出现圆桶形状,表示与本地

解决本地项目推送到码云(github),上提示:failed to push some refs to ...

本地项目上传github 命令如下: 1.git init 2.git add . 3.git commit  -m "init" 4.git remote add origin https://gitee.com/zhouzhiwengang/zzg-envir.git(远程仓库地址) 5.git push -u origin master(执行这个命令行后会弹出下面的错误,出现错误的主要原因是github中的README.md文件不在本地代码目录中) 6.可以通过以下命令解决该问题

git之sourceTree使用github和码云的代码小结

16.使用git出现的错误记录  15. Permission denied (publickey)错误: git远程库与本地库同步 git设置ssh公钥 Bad escape character 'ygen' 14.sourceTree克隆github代码或者码云代码报错现象? 13.生成并部署SSH key? 12.windows下生成ssh? 11.windows下生成github ssh key详解?  ========  16.使用git出现的错误记录  1 .创建ssh key时遇到

使用IDEA工具创建本地项目并且上传到码云

需要条件: 1.码云/Github建好的git项目 2.IDEA编辑器 3.本地项目 步骤1:创建远程项目 步骤2:复制远程项目地址  注意:此处码云官方已经给出上传项目方法,不过用的是命令行的形式,我们选择一种更加简单的方法. 步骤3:创建好本地项目,点击VCS,按照图中指示给项目创建Git仓库. 步骤4:选择此项目的根目录作为仓库. 步骤5:选中项目名先将项目add到缓冲区,再commit到本地仓库. 这里放一张git的add和commit图解帮助大家理解为什么一个新的项目要先add再com

git 码云

版本控制器 """ 完成 协同开发 项目,帮助程序员整合代码 i)帮助开发者合并开发的代码 ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 软件:SVN . GIT(都是同一个人的个人项目) github.gitee(两个采用git版本控制器管理代码的公共平台) git:集群化.多分支 """ git 简介 """ 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码开发时间轴:需

git与svn与github与码云的区别

1.git与github(https://www.oschina.net/)的区别 Git(https://git-scm.com/)是一个版本控制工具 github是一个用git做版本控制的项目托管平台. 2.码云(http://git.oschina.net/)简介 码云是开源中国社区2013年推出的基于 Git 的完全免费的代码托管服务,这个服务是基于 Gitlab 开源软件所开发的,我们在 Gitlab 的基础上做了大量的改进和定制开发,目前已经成为国内最大的代码托管系统,致力于为国内开

初识git命令,简单github,码云,本地仓库搭建

# 说说我理解的github,码云,git命令 1.简介(初学者) 今天了解到git命令,于是就开始了一番折腾,git命令是做什么用的呢?百度百科:Git(读音为/g?t/.)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.说的很对,但是不太容易理解,我之前也有过想了解git这个强大“武器”的想法,但是每次都卡在这里.今天学习时看到一个git的使用教程,于是便自身摸索了一遍,实践了一下下现在写点总结. 初识git的我,把git简单看做可以向远端服务器发送文件的命

Linux下Git和GitHub使用方法总结 (码云)

初学先记住这几条,其他慢慢研究. 下面讲如何用码云完成一个项目的提交, 我的步骤 https://git.oschina.net/phpervip/qianzhu(此例:一个企业模板): 先在码云上注册一个帐号. 然后新建项目,就有一个git地址. 本地进入你的项目目录. 初始化项目->建远程连接->获取项目->添加版本->版本提交->远程提交 git init git remote add origin https://git.oschina.net/phpervip/qi

Myeclipse10.7安装git插件并将Java项目上传到码云(github)

注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit版本不适合当前使用的Myeclipse版本). 通过上网搜索安装eclipse插件主要有以下三种方式: 第一种方式: 对于不同版本的eclipse和myeclipse可能有所不同,主要是有以下两种情况: 1. EGit插件地址:http://download.eclipse.org/egit/updates