zoukankan      html  css  js  c++  java
  • 两种方法自动部署代码:webhooks钩子自动部署代码方法一 及定时任务自动部署二 简介

    在你的码云仓库里面按如下执行:管理-》WebHooks -》添加一个WebHooks钩子文件,这个文件就是回调文件,当你在本地有git push 操作时这个回调文件自动执行,等下我们来创建这个回调文件,主要作用是什么一看就知道。
    在这里插入图片描述

    执行添加:

    在这里插入图片描述
    url 填钩子的地址,即回调地址,例如你的域名下的webHooks.php 文件,如果你是java,你懂的。
    你可以设置一个密码,如123456或者不填。
    push 一定要勾上,其他也可以勾上。
    点击添加即可。

    啥也不说了,直接贴出这个webHooks.php文件。

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2020/11/12
     * Time: 11:09
     */
    file_put_contents('v999.log', date('Y-m-d H:i:s', time()) . '执行了一次git pull任务。' . PHP_EOL, FILE_APPEND);
    
    $savePath = "/home/wwwroot/xxxx.com"; // 你的代码部署地址
    $gitPath = "https://gitee.com/xxxx/xxxx.com.git";//你的仓库地址
    shell_exec("cd {$savePath} &&   git pull {$gitPath} 2>&1");//拉代码
    echo date('H:i'). "  git pull success";
    

      

    这个脚本直接免去了克隆代码那一步,如果你的代码没有在/home/wwwroot/ 下你自己去克隆一下。
    然后回到码云仓库我们测试一下:
    在这里插入图片描述
    我们手动点一下测试,如果输出正确说明钩子文件配置成功。如果有报错,你地址可能填写错误。

    如果你的代码没有pull 到线上,一般是shell_exec 没有生效,可以在php.ini中设置一下。进入php.ini
    找到 disable_functions,配置如下:
    disable_functions =
    将其中的shell_exec 等函数删除。

    如果依然无法git pull 到线上,那么按一下方法解决:
    把该项目整个目录修改为:www用户和www组
    进入项目:
    chown -R www:www *
     
    然后切换到www用户
    su www

    去目录那里执行git pull 如果要输入账号密码的话就按下面的方式解决:
    首先进入到项目目录,输入下面的命令:
    git config --global credential.helper store
    这个命令会在生成一个文件 ~/.git-credentials 用来记录账号和密码。

    然后输入 git pull 命令,会提示输入账号密码,命令执行完后 ~/.git-credentials 文件里会保存你的账号密码,这样下次再次 git pull 的时候就不用输账号密码了。

    然后再切到root 下改点本地的文件上传到码云,再看下是否自动部署,一般都会成功。


                              国界线


    第二种方法:定时任务的方法来自动部署,免去了上面所有的繁琐步骤,直接开启定时任务吧。

    首先在/home/wwwroot 下把你的代码从远程仓库克隆到这里(我们一般把代码放到这里,腾讯云为例)
    git clone -b 分支名 远程地址(-b 是指定分支,不指定则克隆master分支)

    例如:git clone git://github.com/jquery/jquery.git 
    

    定时执行:
    每过1分钟执行后面的命令 :

     */1 * * * * cd /home/wwwroot/你的项目;/usr/local/bin/git pull

    或者:
    */1 * * * * cd /home/wwwroot/你的项目;git pull







    如果你嫌一分钟太慢,那么来个2秒的定时任务。

    */1 * * * * /bin/sh /usr/njmlmysql/synchron

    synchron脚本如下:

    #!/bin/bash
    
    step=2 #间隔的秒数,不能大于60
    
    for (( i = 0; i < 60; i=(i+step) ));do
        /usr/njmlmysql/synchronizationweb.sh
        sleep $step
    done
    
    exit 0
    
    
    

    synchronizationweb.sh脚本如下:
    #!/bin/sh
    cd /home/wwwroot/www.321.com;/usr/local/bin/git pull
    

      

     
     
  • 相关阅读:
    课堂作业(类与对象)
    课堂作业(方法)
    java课堂小作业
    读《大道至简》第二章有感
    课堂作业
    读《大道至简》第一章有感
    "Gun N' Rose" Team学习心得
    Python+Selenium框架版(四)- 框架内封装日志类和浏览器引擎类
    Python+Selenium进阶版(三)- 什么是POM
    Python+Selenium框架版(二)- 简单介绍unittest单元测试框架
  • 原文地址:https://www.cnblogs.com/hml-blog-com/p/13999390.html
Copyright © 2011-2022 走看看