我在通过 PHP 让 Composer 在我的部署服务器上运行时遇到问题。我已经(或将会)使用 GitHub 设置一个 webhook,它将通知我并接受拉取请求,然后自动部署到适当的服务器。
问题来自 bash 行 (cd ${localFolder} && composer install --no-ansi --no-dev --no-interaction --no-progress --no-scripts -- optimize-autoloader)
,它没有给出任何错误或输出,就好像它从未被调用过一样。脚本中的每一行都运行良好,即使是顽固的命令之后的命令也是如此。我还尝试在没有任何选项的情况下运行脚本,并且文件夹位置硬编码为完全相同的结果。
当我尝试通过在 shell 中执行 sudo -H -u www-data bash -c 'echo "./download_project.sh 12345678912345 git_branch git_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);
代码:
#! /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)
注意GUID 将来会用于存档目的。
最佳答案
我真的建议将 cd && composer install
移出您强制进入的子 shell(阅读:删除封闭的 ()
)。
其次,我会暂时将 shebang 修改为 #!/bin/bash +x
以便您可以在某种 Debug模式下运行脚本。
然后向我们展示运行的结果。
关于php - 使用 GitHub PHP Composer 和 Bash 自动部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766190/