php - 使用 GitHub PHP Composer 和 Bash 自动部署

标签 php linux bash ubuntu composer-php

我在通过 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/

相关文章:

php - jQuery 自动完成特殊字符(挪威语)问题

linux - 使用shell脚本从两个列表中提取数据

php - SugarCRM 数据库变量不允许我从我自己的属性中调用 quote() 函数

php - 根据值显示数据库字段名称

c - 如何化解这个二进制炸弹第 4 阶段

linux - redhat linux 中的历史命令

bash - 如何在 Windows 上的 Bash 的 vim 中设置 "copy to clipboard"?

bash - 无需打开浏览器即可进行 gcloud 身份验证?

php - EasyAPNS 无法连接到数据库

java.lang.NoClassDefFoundError : Could not initialize class java. awt.工具包