使用与在Post Step

时间:2016-08-15 16:04:24

标签: git shell jenkins credentials

我想自动化我们的发布流程,并为Maven项目提供以下Jenkins构建作业:

  • 使用已配置的Jenkins凭据(用户名/密码)克隆Git仓库
  • 为构建执行一些Maven命令
  • 配置了Post Step,执行一些额外的Git命令:merge,tag,push

如果我运行构建,则在执行 Post Step Shell脚本时会收到以下错误:

fatal: could not read Username for 'https://mygitserver': Input/output error

Git Repo服务器使用HTTP进行身份验证。

在控制台日志中,我可以看到Jenkins使用.gitcredentials来处理身份验证:

using .gitcredentials to set credentials
> git config --local credential.username jenkins # timeout=10
> git config --local credential.helper store --file=/tmp/git2442727044778485.credentials # timeout=10

我现在想重复使用这些凭据存储,因为它们是在构建开始时创建的,但在克隆后会再次删除。

这在某种程度上是可能的,还是我需要以“Credentials Binding Plugin”等方式自行处理?

3 个答案:

答案 0 :(得分:1)

因为我还没有找到任何在构建开始时从clone命令重用初始Git凭据的解决方案,所以我现在使用了Jenkins Credentials Binding插件并为我的自定义git命令创建了自己的凭据存储在后期步骤。

答案 1 :(得分:0)

这是我为满足类似需求而采取的路径:

  • 我在我的git帐户中添加了一个公共ssh密钥
  • 我在jenkins
  • 中添加了ssh私钥和密码作为ssh凭证
  • 我在git repo clone阶段使用了这个凭据
  • 我在ssh代理jenkins构建环境中重用了相同的凭据 **因此所有post build shell脚本都将使用它

答案 2 :(得分:0)

@olibur 提到的凭据绑定插件可以与自定义 extraEnvs 脚本一起使用,以允许使用 GitHub 应用程序进行身份验证:

首先,GitHub Branch Source 插件可用于存储已安装 GitHub 应用程序的凭据。

Credentials Binding 插件必须设置为提供“用户名和密码(单独)”以及 GitHub 应用程序凭据。密码将是临时访问令牌。在下面它被访问为 extraArgs。用户名是应用程序 ID。

要允许访问 GitHub,必须从 askpass 脚本中返回令牌。通过“注入环境变量”构建步骤,可以将脚本的位置定义为在所有构建步骤中可用的已知位置:

extraVolumes

它必须作为第一个 bash 脚本构建步骤填写,然后 git 才能实际访问存储库:

GIT_ASKPASS

该脚本现在可用于以下所有构建步骤,并且无需指定任何凭据即可使用 git。