使用与在 Post 步骤中的 Shell 脚本中克隆相同的 http git 凭据
Use same http git credentials as for cloning in a Shell script in a Post Step
我想自动化我们的发布过程,我有一个 Maven 项目的以下 Jenkins 构建作业:
- 使用已配置的 Jenkins 凭据克隆 Git 存储库 (username/password)
- 正在为构建执行一些 Maven 命令
- 配置了一个 Post 步骤来执行一些额外的 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" 等方式自行处理?
因为我还没有找到任何解决方案来重用构建开始时来自克隆命令的初始 Git 凭据,我现在刚刚使用了 Jenkins Credentials Binding 插件并创建了自己的凭据在 Post 步骤中存储我的自定义 git 命令。
这是我为满足类似需求而采取的路径:
- 我在我的 git 帐户中添加了一个 public ssh 密钥
- 我在 jenkins 中添加了 ssh 私钥和密码作为 ssh 凭证
- 我在 git 回购克隆阶段使用了这个凭证
- 我在我的 ssh 代理 jenkins 构建环境中重复使用了相同的凭据
** 因此所有 post 构建 shell 脚本都将使用它
@olibur 提到的 Credentials Binding 插件可以与自定义 GIT_ASKPASS
脚本一起使用,以允许使用 GitHub 应用进行身份验证:
首先,GitHub Branch Source 插件可用于存储已安装 GitHub 应用程序的凭据。
必须将 Credentials Binding 插件设置为使用 GitHub 应用凭据提供“用户名和密码(单独)”。密码将是临时访问令牌。在下文中,它被访问为 GITHUB_TOKEN
。用户名为App Id。
要允许访问 GitHub,必须从 askpass 脚本返回令牌。通过“注入环境变量”构建步骤,可以将脚本的位置定义为在所有构建步骤中可用的已知位置:
GIT_ASKPASS=$WORKSPACE/git-askpass.sh
必须在第一个 bash 脚本构建步骤中填写,然后 git 才能实际访问存储库:
echo 'echo $GITHUB_TOKEN' > $GIT_ASKPASS
chmod +x $GIT_ASKPASS
该脚本现在可用于所有后续构建步骤,并且 git 无需指定任何凭据即可使用。
我想自动化我们的发布过程,我有一个 Maven 项目的以下 Jenkins 构建作业:
- 使用已配置的 Jenkins 凭据克隆 Git 存储库 (username/password)
- 正在为构建执行一些 Maven 命令
- 配置了一个 Post 步骤来执行一些额外的 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" 等方式自行处理?
因为我还没有找到任何解决方案来重用构建开始时来自克隆命令的初始 Git 凭据,我现在刚刚使用了 Jenkins Credentials Binding 插件并创建了自己的凭据在 Post 步骤中存储我的自定义 git 命令。
这是我为满足类似需求而采取的路径:
- 我在我的 git 帐户中添加了一个 public ssh 密钥
- 我在 jenkins 中添加了 ssh 私钥和密码作为 ssh 凭证
- 我在 git 回购克隆阶段使用了这个凭证
- 我在我的 ssh 代理 jenkins 构建环境中重复使用了相同的凭据 ** 因此所有 post 构建 shell 脚本都将使用它
@olibur 提到的 Credentials Binding 插件可以与自定义 GIT_ASKPASS
脚本一起使用,以允许使用 GitHub 应用进行身份验证:
首先,GitHub Branch Source 插件可用于存储已安装 GitHub 应用程序的凭据。
必须将 Credentials Binding 插件设置为使用 GitHub 应用凭据提供“用户名和密码(单独)”。密码将是临时访问令牌。在下文中,它被访问为 GITHUB_TOKEN
。用户名为App Id。
要允许访问 GitHub,必须从 askpass 脚本返回令牌。通过“注入环境变量”构建步骤,可以将脚本的位置定义为在所有构建步骤中可用的已知位置:
GIT_ASKPASS=$WORKSPACE/git-askpass.sh
必须在第一个 bash 脚本构建步骤中填写,然后 git 才能实际访问存储库:
echo 'echo $GITHUB_TOKEN' > $GIT_ASKPASS
chmod +x $GIT_ASKPASS
该脚本现在可用于所有后续构建步骤,并且 git 无需指定任何凭据即可使用。