所以我设置了一个基于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,然后它应该让容器从仓库中拉出来,但这并没有发生。只有当我手动启动脚本时,脚本才能正确执行。
有没有人提出问题的提示?
答案 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)
只有当我手动启动脚本时,脚本才能正确执行。
一个可能的原因是两种情况下使用的环境变量和用户帐户的差异
尝试在脚本中显示它们(使用env
和id -a
)以查看两种执行模式(手动或通过webhook)之间的差异