운영 및 유지 관리에 있어 온라인 배포를 위한 시각적 버전 관리 및 코드 제출 플랫폼 구축이 매우 필요합니다. 이 경우 운영 및 유지보수 담당자가 Linux 터미널에서 명령줄이나 git 도구를 사용하는 것은 그리 편리하지 않습니다. 우리에게 필요한 방법은 웹훅 자동 배포 또는 웹 인터페이스 기반 운영 패널을 사용하여 제어하는 것입니다.
이것은 단순한 데모일 뿐이며 프로덕션 링크로 사용할 수 없습니다.
//读取webhookpost提交的数据$data = input('post.');$wdata = [ 'ref' => $data['ref'], 'before' => $data['before'], 'after' => $data['after'], 'compare_url' => $data['before'] ];//取出需要写入日志的数据if (isset($data['commits'][0])) { $wdata['commits_id'] = $data['commits'][0]['id']; $wdata['commits_message'] = $data['commits'][0]['message']; $wdata['commits_url'] = $data['commits'][0]['url']; $wdata['commits_author_name'] = $data['commits'][0]['author']['name']; $wdata['commits_author_email'] = $data['commits'][0]['author']['email']; $wdata['commits_author_username'] = $data['commits'][0]['author']['username']; $wdata['commits_committer_name'] = $data['commits'][0]['committer']['name']; $wdata['commits_committer_email'] = $data['commits'][0]['committer']['email']; $wdata['commits_committer_username'] = $data['commits'][0]['committer']['username']; }//如果日志目录不存在则创建这个是为了后期分析日志还是很有必要的//创建目录if (!is_dir("../logs/".$data['repository']['name'])) { shell_exec("mkdir ../logs/{$data['repository']['name']}"); }//创建文件if (!file_exists("../logs/{$data['repository']['name']}/".date("Y-m-d").".txt")) { shell_exec("touch ../logs/{$data['repository']['name']}/".date("Y-m-d").".txt"); }//写日志文件file_put_contents("../logs/{$data['repository']['name']}/".date("Y-m-d").".txt", implode("|||", $wdata), 2);//看我们的wwwroot目录有没有该项目我的wwwroot目录就是web应用的目录$path = "/data/wwwroot/".$data['repository']['name'];if (!is_dir($path)) { $commandStr = "cd /data/wwwroot/ && sudo /usr/bin/git clone http://[你自己的git账号]:[你自己的git密码]@git.sikukeji.com/".$data['repository']['full_name']; $outPut = shell_exec($commandStr); return Json::create($outPut); }else{ $commandStr = "cd /data/wwwroot/{$data['repository']['name']} && sudo /usr/bin/git pull"; $outPut = shell_exec($commandStr); return Json::create($outPut); }
$commandStr = "cd /data/wwwroot/ && sudo /usr/bin/git clone http://[你自己的git账号]:[你自己的git密码]@git.sikukeji.com/".$data['repository']['full_name'];
위 명령은 먼저 작업 디렉터리를 /data/로 전환합니다. wwwroot 디렉토리입니다. 이것은 내 웹 디렉토리입니다. 두 번째 명령 sudo /usr/bin/git clone http://[자신의 git 계정]:[자신의 git 비밀번호]@git.sikukeji.com/”.$data['repository']['full_name ']; 사실 그냥 일반 git 명령을 실행하고 온라인 git 코드 베이스의 코드를 로컬에 복제했습니다.
이것을 작성한 후에는 코드에 문제가 없습니다. 실제로 웹훅이 실행되지 않습니다. .왜? git을 실행할 때 시스템 관리자 권한으로 명령을 실행하는 데 sudo가 사용됩니다.Linux에서 sudo를 사용하여 실행할 때는 루트 [관리자] 비밀번호를 입력해야 한다는 것을 알고 있지만 PHP의 shell_exec를 사용할 때는 실행하려면 비밀번호를 입력할 방법이 없는데 이때는 어떻게 해야 하나요? 사실 리눅스에서는 비밀번호를 입력하지 않고 sudo를 사용할 수 있는 방법이 있습니다. 구성 파일 /etc/sudoers. 이름에서 그 의미를 추측할 수 있습니다.
암호 없이 git 명령 추가
PHP 실행은 실제로 www 사용자이므로 git을 실행하여 설정할 수 있습니다. PHP는 또한 www 사용자가 비밀번호 없이 git을 실행할 수 있도록 허용하는 명령문은
www ALL=NOPASSWD:/usr/bin/git
궁금한 점이 있으면 weiyongqiang@weiyongqiang.com으로 이메일을 보내주세요.
관련 권장 사항:웹훅을 사용하여 코드를 배포하는 Github 정보 ?
위 내용은 PHP에서 웹훅을 작성하면 git을 실행할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!