我有2个GIT存储库副本,我们称之为“origin”和“backup”。我想要实现的目标如下。 我的团队不断推动并将他们的更改同步到“origin”,但我想确保我在不同的地理位置有一份“origin”的副本作为一个副本,以防火灾爆发,摧毁我办公室里的一切。为了实现这一点,我保留了在云上托管的git仓库的相同副本。
现在使用Jenkins和Windows批处理脚本的组合,我试图找到一种方法,我可以保持这些存储库同步。批处理脚本将负责实际的同步操作,Jenkins将确保定期运行同步操作。副本名为“backup”(正如您可能已经猜到的那样)。
问题是当我从命令提示符直接运行批处理脚本时,它完全按照我的意愿执行;但是当我尝试通过Jenkins作业执行批处理脚本时,它会一直等待“backup”存储库的用户名和密码。 “backup”存储库的凭据已存储在Windows凭据管理器中,批处理脚本可以在直接执行时使用凭据,但当我尝试通过Jenkins执行时,情况并非如此
我试过谷歌搜索,搜索甚至做了很多搜索,看看我是否能在jenkins论坛找到一些东西,但到目前为止我还没有发现任何有用的东西。
我不确定这是否有用,但下面是我的批处理脚本供参考。
@echo OFF
pushd K:
pushd "K:\my-git-workspace\mygit-repo"
echo Pulling "master" from origin
git pull origin master
echo Pulling "master" from backup
git pull backup master
echo Pushing "master" to backup
git push backup master
echo Pushing "master" to origin
git push origin master
echo Pulling all tags from origin
git pull --tags origin
echo Pulling all tags from backup
git pull --tags origin
echo Pushing all tags to backup
git push --tags backup
echo Pushing all tags to origin
git push --tags origin
popd
这是我在Windows命令提示符下看到的我的GIT配置。(我已将user.name和user.email替换为虚拟值)
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.email=myemail@domain.com
user.name=My Name
credential.helper=wincred
这是我从Jenkins运行时获得的GIT配置(git config -l)
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.email=myemail@domain.com
user.name=My Name
credential.helper=wincred
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=//networkrepo/git/repo
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
remote.backup.url=http://cloud-hosted-git-repo/repo.git
remote.backup.fetch=+refs/heads/*:refs/remotes/backup/*
gui.wmstate=zoomed
gui.geometry=584x210+321+316 304 192
credential.helper=store
user.email=myemail@domain.com
user.name=My Name
不言而喻,非常感谢任何帮助。
干杯。
答案 0 :(得分:5)
终于找到了解决方案。感谢David Ruhmann。 David在他对该问题的评论中提到的解决方案是转到Windows服务管理器并从&#34更改" Log On As" 列的值;本地系统" 到用于从命令提示符运行批处理脚本的Windows帐户。在我的情况下,因为Windows的登录用户被称为" BOB" ,将本地系统值更改为 BOB 并指定服务管理器中此用户的登录密码可以解决问题。
要记住的另一件事是;要使更改生效,您必须重新启动Jenkins服务。