宝塔WebHook实现自动部署网站

日志 / 1833人浏览 / 0人评论

    服务器是centos7,控制面板是宝塔5.9,已安装lnmp ,GitLab 8.8.5和WebHook1.0.实现当有git push提交代码时自动部署网站(包括创建、更新网站)。

    首先在宝塔的WebHook添加一条记录

    image.png

    image.png    

    编辑这条记录,输入脚本内容:

   image.png

      脚本内容如下:

        #!/bin/bash

         

        

        echo ""

        #输出当前时间

        date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"

        echo "Start"

        #判断宝塔WebHook参数是否存在 

        if [ ! -n "$1" ];

        then 

                  echo "param参数错误"

                  echo "End"

                  exit

        fi

        #git项目路径  

        gitPath="/www/wwwroot/$1"

        #git 网址,根据实际情况

        gitHttp="ssh://git@xxx.xxx.xxx.xxx:端口号/zhou/$1.git"

        echo "Web站点路径:$gitPath"

        #判断项目路径是否存在

        if [ -d "$gitPath" ]; then

                cd $gitPath

                #判断是否存在git目录

                if [ ! -d ".git" ]; then

                        echo "在该目录下克隆 git"

                        sudo git clone $gitHttp gittemp

                        sudo mv gittemp/.git .

                        sudo rm -rf gittemp

                fi

                echo "拉取最新的项目文件"

                #sudo git reset --hard origin/master

                sudo git pull        

                echo "设置目录权限"

                sudo chown -R www:www $gitPath

                echo "End"

                exit

        else

                echo "该项目路径不存在"

                        echo "新建项目目录"

                mkdir $gitPath

                cd $gitPath

                #判断是否存在git目录

                if [ ! -d ".git" ]; then

                        echo "在该目录下克隆 git"

                        sudo git clone $gitHttp gittemp

                        sudo mv gittemp/.git .

                        sudo rm -rf gittemp

              fi

                echo "拉取最新的项目文件"

                #sudo git reset --hard origin/master

                sudo git pull

                echo "设置目录权限"

                sudo chown -R www:www $gitPath

                echo "End"

                exit

             fi

        查看这条记录的密钥 ,http://面板/hook?access_key=123&param=aaa  其中面板是控制面板的网址,如果有端口号要带上端口号,如: http://xxx.xxx.xxx.xxx:8888/hook?access_key=密钥&param=aaa

        image.png

        

        接下来进入GitLab后台, 进入项目,从左侧的设置进入,进入web钩子,填写链接(param参数需要填写项目名称,),触发选择推送事件

        image.png

    image.png

    点击 增加Web钩子 ,成功添加

    将webhook拉取本地电脑,添加内容推送测试,发现已经触发了服务器的webhook,证明已经调用了该脚本 ,服务器的项目目录也有了webhook的文件夹,但文件夹里面除了.git外是空,   干脆在webhook里直接git pull,结果提示 Already up-to-date.  但还是什么都没拉取到。这么诡异的事情8成是权限的问题

    image.png

        image.png

        image.png 

      由于这个文件夹是属于www用户的,所以从www用户入手,修改 /etc/passwd

       # vim /etc/passwd

      修改如下,使得www能够登录。

       image.png 

       获取user.email   git使用的邮箱。

       # git config -l

       从root切换到www

        # su www

        查看git的ssh的公钥在不在,

        # cat ~/.ssh/id_rsa.pub

        image.png

        id_rsa.pub不存在,不过知道了.ssh的位置是在 /home/www/   , 使用ssh-keygen创造git的ssh公钥 

        # ssh-keygen -t rsa -C 上面查到的邮箱

        提示/home/www/.ssh 不存在这个文件夹,只能先建立文件夹,切换回root身份来创建文件夹(www没有权限)

        # mkdir /home/www/

        # mkdir /home/www/.ssh

        #chown -R www:www /home/www

        image.png

        再次切换回www,创建ssh公钥,成功了

        image.png

        复制 /home/www/.ssh/id_rsa.pub 的内容,添加到gitlab的ssh密钥中。

        image.png

        再次在本地电脑提交,服务器的webhook目录依旧没有文件,想了想应该是root用户的ssh公钥没有部署到GitLab上,于是在服务器使用ssh-keygen来生成公钥并部署到GitLab上。这次本地电脑提交后,服务器的webhook目录终于刷新了文件。

        

        

        

        

        

        

      

            

    

    

感谢博主,喝杯咖啡~

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我