6

我正在使用 ec2 实例 @ ubuntu 。从我的 AMI 启动一个新实例后,我试图自动执行“git pull”。repo 目录已经在我的 AMI 中,我只需要更新 repo。

我现在正在做的是将“git pull origin master”放在 rc.local 中......但它不起作用......

4

5 回答 5

4

我让它工作..

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

于 2013-04-10T21:22:31.233 回答
3

git --git-dir=some/dir/.git pull origin master应该管用

于 2013-04-10T20:56:04.617 回答
0

如果您想git pull在创建实例(首次启动)时执行此操作,则可以使用cloud-init

检查 AWS 文档将 shell 脚本传递给包含用户数据的实例

这可以通过使用 ansible / saltstack 等实现自动化,为了进行测试,您可以手动上传脚本。在“高级详细信息”的第 3 步“配置实例”中,选择选项作为文件并将脚本放在下面。

在此处输入图像描述

您可以在那里上传您的自定义脚本:

#!/bin/sh

echo "git pull or any other custom commands here"
于 2017-10-16T17:50:11.877 回答
0

放置代码的正确位置不是/etc/rc.local/but ~/.profile。然后,您可以以登录用户身份运行命令,而无需sudosu更改运行命令的用户。

于 2017-01-16T00:14:13.140 回答
0

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
于 2017-10-16T17:18:34.830 回答