Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GitHub PHP Composer和Bash自动部署_Php_Linux_Bash_Ubuntu_Composer Php - Fatal编程技术网

使用GitHub PHP Composer和Bash自动部署

使用GitHub PHP Composer和Bash自动部署,php,linux,bash,ubuntu,composer-php,Php,Linux,Bash,Ubuntu,Composer Php,我在通过PHP让Composer在部署服务器上运行时遇到了一个问题。我已经(或将要)使用GitHub设置了一个webhook,它将通知我并接受请求,然后自动部署到相应的服务器 问题来自bash行(cd${localFolder}&&composer安装--没有ansi--没有开发--没有交互--没有进度--没有脚本--优化自动加载),它没有给出任何错误或输出,就像从未调用过一样。脚本中的每一行都运行良好,即使是在顽固的一行之后的命令。我还尝试在没有任何选项的情况下运行脚本,并使用硬编码的文件夹位

我在通过PHP让Composer在部署服务器上运行时遇到了一个问题。我已经(或将要)使用GitHub设置了一个webhook,它将通知我并接受请求,然后自动部署到相应的服务器

问题来自bash行
(cd${localFolder}&&composer安装--没有ansi--没有开发--没有交互--没有进度--没有脚本--优化自动加载)
,它没有给出任何错误或输出,就像从未调用过一样。脚本中的每一行都运行良好,即使是在顽固的一行之后的命令。我还尝试在没有任何选项的情况下运行脚本,并使用硬编码的文件夹位置来获得完全相同的结果

当我尝试通过在shell中执行
sudo-H-u www-data bash-c'echo./download\u project.sh 12345678912345 git\u branch git\u repo'
来测试该命令时,它运行良好,并已完成

PHP代码:

$data = json_decode(utf8_encode(file_get_contents("data.json")));
$command = "/var/www/download_project.sh" . " " . uniqid() . " " . $data->deployTable[$deploy]->branch . " " . $data->deployTable[$deploy]->repository;
echo ($command . "</br>");
echo shell_exec($command);

注意:GUID将来将用于存档目的。

我建议将
cd&&composer安装从您强制安装的子shell中移出(读取:移除封装的
()

其次,我将临时修改shebang,使其为
#!/bin/bash+x
,这样您就可以在某种调试模式下运行脚本


然后向我们展示运行的结果。

如果您在bash代码中将cd和composer安装到不同的行中,会发生什么情况?此外,如果您手动逐行运行脚本,这是否有效?@MikelBitson如果我破坏cd,我会得到相同的结果。如果我在shell中逐行运行命令,它可以与我自己或www数据一样正常工作。如果我只运行脚本中的顽固行,我会得到相同的非结果。投票给你的可见性,希望有人能帮忙。我不知道为什么这不起作用-我为我的网站运行了一个非常类似的脚本。composer是否在服务器上全局安装?@MikelBitson Yes composer是全局安装并单独管理的。谢谢投票。Y您并没有描述对出错原因的任何观察。您指向shell脚本中有“问题”的那一行,指出“它没有给出任何错误,其他每一行都可以正常运行,即使是在顽固的那一行之后的命令也可以正常运行”。因此,脚本没有失败或停止,但到底有什么不起作用?
#! /bin/bash

if [ "$#" -ne 3 ]; then
    echo "Usage: $(basename $0) [guid] [branch] [repository]"
    exit 1
fi

working="/var/www/"
guid=$1
branch=$2
repository=$3
localFolder="${working}temp/"
localFile="${working}temp.zip"

#clone the appropriate branch and repository to the /var/www/temp folder
#result: functions as expected
git clone -b $branch git@github.com:ORGANIZATION/$repository.git $localFolder

#moves the sql folder out of /var/www/temp and onto /var/www to be used for db creation and/or migration
#result: functions as expected
mv "${localFolder}sql" "${working}sql"

#removes /var/www/temp/doc as it is not needed or wanted for production
#result: functions as expected
rm -rf "${localFolder}doc"

#downloads all dependencies  into the /var/www/temp/vedor folder
#result: nothing happens
(cd ${localFolder} && composer install --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader)