Jenkins 未从 Windows 凭据管理器中检测到 GIT 凭据
Jenkins does not detect GIT credentials from Windows Credential manager
我有 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 config -l) 时得到的 GIT 配置
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
不言而喻,非常感谢任何帮助。
干杯。
终于找到解决办法了。感谢 David Ruhmann。大卫在他对问题的评论中提到的解决方案是转到 windows 服务经理并将 "Log On As" 列的值从 "Local System" 到您正在使用的 Windows 帐户 运行 来自命令提示符的批处理脚本。在我的例子中,因为 windows 的登录用户被称为 "BOB",将 Local System 值更改为 BOB 并在服务管理器中为此用户指定登录密码就成功了。
还有一件事要记住;要使更改生效,您必须重新启动 Jenkins 服务。
我有 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 config -l) 时得到的 GIT 配置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
不言而喻,非常感谢任何帮助。
干杯。
终于找到解决办法了。感谢 David Ruhmann。大卫在他对问题的评论中提到的解决方案是转到 windows 服务经理并将 "Log On As" 列的值从 "Local System" 到您正在使用的 Windows 帐户 运行 来自命令提示符的批处理脚本。在我的例子中,因为 windows 的登录用户被称为 "BOB",将 Local System 值更改为 BOB 并在服务管理器中为此用户指定登录密码就成功了。
还有一件事要记住;要使更改生效,您必须重新启动 Jenkins 服务。