我正在使用 ec2 实例 @ ubuntu 。从我的 AMI 启动一个新实例后,我试图自动执行“git pull”。repo 目录已经在我的 AMI 中,我只需要更新 repo。
我现在正在做的是将“git pull origin master”放在 rc.local 中......但它不起作用......
我正在使用 ec2 实例 @ ubuntu 。从我的 AMI 启动一个新实例后,我试图自动执行“git pull”。repo 目录已经在我的 AMI 中,我只需要更新 repo。
我现在正在做的是将“git pull origin master”放在 rc.local 中......但它不起作用......
我让它工作..
sudo -u ubuntu -i git --git-dir=/home/ubuntu/blastoff/.git --work-tree=/home/ubuntu/blastoff/ 获取来源 sudo -u ubuntu -i git --git-dir= /home/ubuntu/blastoff/.git --work-tree=/home/ubuntu/blastoff/merge origin/master
git --git-dir=some/dir/.git pull origin master
应该管用
如果您想git pull
在创建实例(首次启动)时执行此操作,则可以使用cloud-init。
检查 AWS 文档将 shell 脚本传递给包含用户数据的实例
这可以通过使用 ansible / saltstack 等实现自动化,但为了进行测试,您可以手动上传脚本。在“高级详细信息”的第 3 步“配置实例”中,选择选项作为文件并将脚本放在下面。
您可以在那里上传您的自定义脚本:
#!/bin/sh
echo "git pull or any other custom commands here"
放置代码的正确位置不是/etc/rc.local/
but ~/.profile
。然后,您可以以登录用户身份运行命令,而无需sudo
或su
更改运行命令的用户。
从https://stackoverflow.com/a/8880633/659188和您上面的工作答案中记笔记,您可以通过在文件中执行类似的操作将其应用于潜在的多个文件夹rc.local
(也只拉当前分支而不是始终是主) :
#!/bin/bash -e
# /etc/rc.local
# Ensure folders in array have a trailing slash!
declare -a folders=("/var/www/html/project1/" "/var/www/html/project2/" "/some/other/location/")
# Update to latest in all above folders
for i in "${folders[@]}"
do
sudo -u ubuntu -i git --git-dir=$i/.git --work-tree=$i fetch origin
sudo -u ubuntu -i git --git-dir=$i/.git --work-tree=$i pull
done
exit 0