一些上下文:我在一个 git 企业环境中,有一个 git repo,我在其中拉取整个代码,gulp 构建它,然后将分发复制到另一个 repo,在那里我将它推送到远程。
我已经在 bash 脚本中自动化了所有这些,每当我执行sh gittogulp.sh
它时,它都会完美无缺。但是当我使用 cronjob 来做到这一点时,它无法从 git 中提取新内容,而是从已经存在的内容中构建 gulp。
我想知道,如何在不手动触发脚本的情况下从 git repo 中提取。Webhooks 不是我的选择。:(
gittogulp.sh
是:
#!/bin/bash
cd ~/mainrepo
git checkout dev
git fetch
echo "Pulling latest code from git repo"
git pull
for commitid in $(git log --format="%h" -n 10)
do
git checkout dev
echo "git reset hard"
git fetch --all
git reset --hard origin/dev
echo "Checkout commit id: ""$commitid"
echo git checkout "$commitid"
git checkout "$commitid"
echo "Installing dependencies"
npm install
echo "Gulpifying the code"
gulp dev
basefolder="/root/mainrepo/manifests"
basedestfolder="/root/outputrepo/dev"
if [ -d "$basefolder" ]; then
versionrepo=`cat "$basefolder"/version.txt`
echo "Version in repo: ""$versionrepo"
destfolder="$basedestfolder""/""$commitid"
if [ -d "$destfolder" ]; then
echo "Latest outputs are already in place"
break
else
echo "copying latest output to ""$destfolder"
mkdir "$destfolder"
cp -r "$basefolder" "$destfolder"
zipname="$versionrepo""_""$commitid"".zip"
zipdestpath="$basedestfolder""/""$zipname"
echo "Making new zip from latest commit"
echo zip -r "$zipdestpath" "$destfolder"
zip -r "$zipdestpath" "$destfolder"
fi
else
echo "$basefolder"" : folder doesn't exist, exiting"
fi
done
cd ~/outputrepo
git pull
git add .
git commit -m "adding new zip"
git push
也许您不能使用.sh
文件作为更改目录的终端,因此我向您提供使用以下方法(即.sh
文件中的第 1,2 行):
git --git-dir=/home/<User>/<your_path>/.git checkout dev
...
并遵循此原始答案:git pull while not in a git directory
编辑:
另一种更好的方法是使用 fabfile(用于 python):
使用 fabfile 的 git 命令
例如(很简单):
fabfile.py:
from fabric.api import *
env.user = 'your_user'
env.hosts = ['127.0.0.1']
env.password = 'you_pswd'
@task
def pull():
code_dir = '/srv/django/myproject'
with cd(code_dir):
run("git pull")
另一个例子(在本地):
.
|-- __init__.py
|-- app.wsgi
|-- fabfile.py <-- our fabfile!
|-- manage.py
`-- my_app
|-- __init__.py
|-- models.py
|-- templates
| `-- index.html
|-- tests.py
|-- urls.py
`-- views.py
工厂文件.py:
from fabric.api import *
@task
def push():
local("git add -p && git commit")
local("git push")
最后:
$ fab pull
$ fab push
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句