【发布时间】:2019-01-30 10:52:38
【问题描述】:
我创建了一个 post-receive 挂钩来部署对应用程序的更改并通过 Yarn 安装包。它看起来像这样:
#!/bin/sh
echo "Checking out changes..."
git --work-tree=/home/me/apps/app --git-dir=/home/me/repos/repo.git
checkout -f
echo "Yarn install..."
cd /home/me/apps/app
yarn install
注意事项(有效的东西):
第一部分工作正常。钩子肯定在运行。主应用文件按预期更新。
当从命令行执行yarn install 并通过 ssh 进入服务器时,所有软件包都安装成功。 (通过 ssh 进入服务器的用户是推送提交和运行钩子的同一用户。)
已检查所有目录的权限问题。
问题:
在尝试通过 Yarn 安装软件包时,钩子每次都会失败。具体来说,它在尝试从 Github 安装包依赖项时失败。它确实 似乎检索了这些包(或者至少它没有告诉我检索它们有任何问题),它只是在尝试将它们移动到node_modules 目录时做错了。
我收到以下两个错误之一:
remote: error Command failed.
remote: Exit code: 128
remote: Command: git
remote: Arguments: pull
remote: Directory:
/home/me/.cache/yarn/v2/.tmp/45d918f2ecb73f845db6f9b2f91617a3
remote: Output:
remote: fatal: Not a git repository: '.'
或者:
remote: error Command failed.
remote: Exit code: 128
remote: Command: git
remote: Arguments: clone https://github.com/Account/package.git /home/me/.cache/yarn/v2/.tmp/45d918f2ecb73f845db6f9b2f91617a3
remote: Directory: /home/me/apps/app
remote: Output:
remote: fatal: Working tree '/home/me/apps/app' already exists
上面的一些包和用户详细信息做了一点修改,但是任何与git相关的包安装都失败了,但只是在post-receive钩子中。
在第二个错误中,这很奇怪,因为 git 命令似乎暗示它正在尝试将 repo 克隆到缓存中,但随后有一条消息表明它正在尝试将包克隆到主应用程序目录中。
我竟然用钩子把package.json复制到一个新目录,cd进去,然后尝试yarn install。产生了同样的错误。
我完全糊涂了。
【问题讨论】:
-
您可以在脚本开头使用:
export GIT_DIR=/home/me/repos/repo.git和export GIT_WORK_TREE=/home/me/apps/app吗? -
请不要将答案添加到问题中。按下面的“回答您的问题”按钮。见Can I answer my own question?
-
感谢@VonC,您的评论帮助我发现问题出在环境变量上。
-
干得好。好答案。 +1
标签: git yarnpkg git-post-receive