Docker Webhook容器:应该运行脚本,但脚本没有正确执行(只有echo正在运行)

时间:2017-10-03 22:40:30

标签: git bash docker sh webhooks

所以我设置了一个基于almir/webhook的容器的Docker容器,我将git和docker添加到图像中,因此我可以运行相应的命令。问题是,它在我手动测试时运行,甚至在我通过终端从容器内部启动脚本时运行。但是当我通过URL触发脚本时,我只得到回声作为输出而没有"真实"命令被执行。

我的脚本如下所示:

#!/bin/sh

echo "current directory: " + $PWD
git pull
echo "pulling from git"
docker exec -ti geda-drupal gedankenbruecke/vendor/drush/drush/drush st
echo "clear drupal cache"
echo "Script finished successful"
echo "testPull"

我的输出是:

[webhook] 2017/10/03 21:08:58 incoming HTTP request from 172.18.0.4:38050
[webhook] 2017/10/03 21:08:58 tuleapPull got matched
[webhook] 2017/10/03 21:08:58 tuleapPull hook triggered successfully
[webhook] 2017/10/03 21:08:58 2017-10-03T21:08:58Z | 200 |   61.3µs | webhook.localhost | GET /hooks/tuleapPull 
[webhook] 2017/10/03 21:08:58 executing /var/webhook/scripts/tuleapPull.sh (/var/webhook/scripts/tuleapPull.sh) with arguments ["/var/webhook/scripts/tuleapPull.sh"] and environment [] using /var/repo/ as cwd
[webhook] 2017/10/03 21:08:58 command output: current directory:  + /var/repo
pulling from git
clear drupal cache
Script finished successful
testPull

[webhook] 2017/10/03 21:08:58 finished handling tuleapPull

因此脚本似乎正确执行,但重要的命令却没有。我通过对我的仓库进行新推送来测试它,这会触发webhook-Url,然后它应该让容器从仓库中拉出来,但这并没有发生。只有当我手动启动脚本时,脚本才能正确执行。

有没有人提出问题的提示?

2 个答案:

答案 0 :(得分:2)

从我的角度来看,你的问题似乎是缺少TTY

docker exec -ti geda-drupal gedankenbruecke/vendor/drush/drush/drush st

您需要TTY才能使此命令起作用,因此不需要这样做

docker exec -ti geda-drupal gedankenbruecke/vendor/drush/drush/drush st

下一期可能没有完整的命令路径。有时PATH变量未在此类执行中定义,并导致问题。因此,您最好用完整路径替换路径

#!/bin/sh

echo "current directory: " + $PWD
/usr/bin/git pull
echo "pulling from git"
/usr/bin/docker exec -ti geda-drupal gedankenbruecke/vendor/drush/drush/drush st
echo "clear drupal cache"
echo "Script finished successful"
echo "testPull"

答案 1 :(得分:1)

  

只有当我手动启动脚本时,脚本才能正确执行。

一个可能的原因是两种情况下使用的环境变量和用户帐户的差异 尝试在脚本中显示它们(使用envid -a)以查看两种执行模式(手动或通过webhook)之间的差异