首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发射船坞时挂钩

发射船坞时挂钩
EN

Stack Overflow用户
提问于 2021-08-20 08:30:57
回答 1查看 286关注 0票数 0

我为我的Laravel应用程序做了这个后合并git钩子:它基本上检查已更改的文件和执行匹配的命令(运行迁移、编译资产等等)。

代码语言:javascript
复制
#!/bin/bash
set -ex
CHANGED_FILES="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

changed() {
    echo "$CHANGED_FILES" | grep -q "$1"
}


if [[ "$USER" == "root" || "$USER" == "ec2-user" ]]; then
    sudo chown -R www-data: htdocs
fi

if changed composer.lock; then
    docker-compose run --rm worker bash -c "composer install"
fi

if changed "migrations\|seeders"; then
    docker-compose run --rm worker php artisan migrate --force --seed
fi

if changed .blade.php$; then
    docker-compose run --rm worker php artisan view:clear
fi

if changed .php$; then
    docker-compose run --rm worker bash -c "php artisan cache:clear && php artisan route:clear"
fi

if changed "yarn.lock$\|.js$\|.scss$"; then
    docker-compose run --rm node bash -c "yarn && yarn prod"
fi

if changed httpd.conf; then
    docker-compose up -d --force-recreate apache
fi

docker-compose restart worker

exit 0

如果我手动启动钩子,./.git-hook/post-merge (它在一个非常规文件夹中,所以钩子本身是提交的),它可以工作,但是当它由git执行时,它总是在创建容器之后挂起。这只发生在AMI linux上,它在我的mac上运行得很好。

输出如下所示

代码语言:javascript
复制
$ git pull
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 13 (delta 8), reused 0 (delta 0), pack-reused 0
Decompressione degli oggetti in corso: 100% (13/13), 1.44 KiB | 490.00 KiB/s, fatto.
Da bitbucket.org:[my-private-repo]
   ec60a04..def0d31  master     -> origin/master
Aggiornamento di ec60a04..def0d31
Fast-forward
 .git-hooks/post-merge                         |  2 +-
 htdocs/app/Http/Controllers/ApiController.php | 25 ++++++++++++++++++++++---
 2 files changed, 23 insertions(+), 4 deletions(-)
++ git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD
+ CHANGED_FILES='.git-hooks/post-merge
htdocs/app/Http/Controllers/ApiController.php'
+ [[ ec2-user == \r\o\o\t ]]
+ [[ ec2-user == \e\c\2\-\u\s\e\r ]]
+ sudo chown -R www-data: htdocs
+ changed composer.lock
+ echo '.git-hooks/post-merge
htdocs/app/Http/Controllers/ApiController.php'
+ grep -q composer.lock
+ changed 'migrations\|seeders'
+ echo '.git-hooks/post-merge
htdocs/app/Http/Controllers/ApiController.php'
+ grep -q 'migrations\|seeders'
+ changed '.blade.php$'
+ echo '.git-hooks/post-merge
htdocs/app/Http/Controllers/ApiController.php'
+ grep -q '.blade.php$'
+ changed '.php$'
+ echo '.git-hooks/post-merge
htdocs/app/Http/Controllers/ApiController.php'
+ grep -q '.php$'
+ docker-compose run --rm worker bash -c 'php artisan cache:clear && php artisan route:clear'
Creating www_worker_run ... done

Creating www_worker_run ... done是我最后看到的东西,然后输出停止(我等了几分钟就放弃了)

感谢@fredrik,我有更多的信息:挂起的命令是这个docker-compose run --rm worker bash -c 'php artisan cache:clear && php artisan route:clear',但是我可以在2.5秒内从shell运行它。

代码语言:javascript
复制
$ docker-compose run --rm worker bash -c 'php artisan cache:clear && php artisan route:clear'
Creating www_worker_run ... done
Application cache cleared!
Route cache cleared!
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 18:16:15

正如@fredrik所指出的,问题是git没有一个交互式终端,所以docker-复合命令正在失败。

-T选项仅适用于此。

来自docker run -h

代码语言:javascript
复制
-T Disable pseudo-tty allocation. By default `docker-compose run` allocates a TTY.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68859202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档