Jenkins - 构建私有 GitHub 存储库

客观的

本指南向您展示如何配置现有 Jenkins 服务器以使用GitHub 部署密钥与私有 GitHub 存储库进行通信。

我的意图是快速并以最少的解释直截了当。

先决条件

本指南假设您有:

  • 具有包含某种形式的源代码或文件的私有 GitHub 存储库的 GitHub 帐户。
  • 一个 AWS 账户,其中包含一个通过安装 Jenkins 运行的 EC2 实例。如果您没有此指南,请参阅我的Jenkins - 在 AWS 中设置构建环境指南。
  • Jenkins的基础知识。
  • GitHub的基础知识。

我使用 macOS,但本指南也适用于 Linux 和 Windows。

概述

Jenkins - 构建私有 GitHub 存储库

  • 创建一个简单的 Jenkins 作业
  • 在 Jenkins 服务器上生成 SSH 密钥
  • 将 SSH 密钥添加为 Jenkins 凭据
  • 将 SSH 密钥添加为 GitHub 部署密钥
  • 将凭证添加到 Jenkins 作业
  • Jenkins - 构建私有 GitHub 存储库
  • 在开始之前,请确保您的 Jenkins EC2 实例正在运行,登录您的 Jenkins 仪表板和您的 GitHub 帐户。

创建一个简单的 Jenkins 作业

  • 打开Jenkins 仪表板并从左侧菜单中选择新建项目。
  • 为项目命名(这可以是您想要的任何名称,但它代表工作本身)
  • 从选项列表中选择Freestyle 项目,然后单击确定
  • 加载作业配置视图后,找到源代码管理部分并勾选Git
  • 添加所需私有 GitHub 存储库的SSH 克隆 URL
  • 您应该会看到一条错误消息,内容如下:“无法连接到存储库…”。现在这很好;这是因为我们还没有设置 SSH 密钥。
  • 向下滚动到Build部分,单击Add build step,然后从列表中选择 * Execute shell 。
  • 在出现的文本区域中,输入:echo “Hello, world!”
  • 滚动到底部,然后单击保存
  • 您现在将被带到您的工作概览;单击左侧菜单中的立即构建以触发构建
  • 这应该立即失败,但这就是此时的意图。单击内部版本号旁边的红点以查看控制台输出。
  • 查看控制台输出,您应该会看到与以下内容相关的参考:“权限被拒绝”或“无法从远程存储库读取”——这就是我们要解决的问题。
  • 通过单击顶部的仪表板面包屑返回到Jenkins 仪表板,然后继续下一部分。

在 Jenkins 服务器上生成 SSH 密钥

  • 打开一个终端并通过 SSH 连接到您的 EC2 Jenkins 服务器:(用您的信息ssh -i /path/to/<your_key_pair.pem> ec2-user@<your_public_dns>替换)
  • sudo 到 jenkins 用户:sudo su -s /bin/bash jenkins.

本指南假定您使用的是 Linux 或 macOS,但如果您使用的是 Windows,则可以参考 AWS 指南,了解
使用 PuTTY 从 Windows 连接到您的 Linux 实例

  • 生成 SSH 密钥:ssh-keygen.
  • 接受提示中的默认设置并将密码留空。
  • 让终端保持打开状态并继续下一部分。

将 SSH 密钥添加为 Jenkins 凭据

  • 从Jenkins 仪表板的左侧菜单中选择Manage Jenkins 。
  • 在Security部分下,选择Manage Credentials。
  • 在标记为Stores scoped to Jenkins的表中,单击Jenkins商店。
  • 在标有System的表中,单击Global credentials域。
  • 从左侧的菜单中,单击Add Credentials。
  • 在出现的表单中,应用以下内容:
种类:带有私钥的 SSH 用户名
范围:全球
身份证:(空白)
说明:(空白)
用户名:gh-deploy
私钥:勾选直接输入,然后单击添加
回到 Jenkins 终端会话,将私钥复制到剪贴板:cat ~/.ssh/id_rsa
将此键粘贴到表单中,确保不包含任何额外的前/后空格
密码:(空白)
点击确定
  • 我们将在后续步骤中将此凭证应用于您的新工作。
  • 保持终端会话打开并继续下一部分。

将 SSH 密钥添加为 GitHub 部署密钥

  • 打开 GitHub 并选择您在作业配置中指定的存储库
  • 在 repo 视图中,选择Settings选项卡
  • 从左侧菜单中,选择部署密钥,然后单击右侧显示添加部署密钥的按钮
  • 给部署密钥一个标题(将其与给詹金斯凭证的名称匹配是有意义的gh-deploy:)
  • 回到 Jenkins 终端会话,将公钥复制到剪贴板:cat ~/.ssh/id_rsa.pub
  • 将此键粘贴到表单中,确保不包含任何额外的前/后空格
  • 未选中允许写访问
  • 单击添加密钥
  • SSH 密钥现在附加到这个特定的 GitHub 存储库,并用作Deploy Key。有关部署密钥的更多信息,请查看GitHub 文档

将凭证添加到 Jenkins 作业

  • 返回Jenkins 仪表板并选择我们在第一部分中创建的新作业。
  • 从工作概述;单击左侧菜单中的配置
  • 滚动到源代码管理部分并从凭证选择列表中选择您的新凭证
  • 您现在应该看到错误已解决
  • 滚动到底部,然后单击保存
  • 您现在将被带到您的工作概览;单击左侧菜单中的立即构建以触发构建
  • 作业现在应该成功了
  • 单击内部版本号旁边的蓝点以查看控制台输出。
  • 查看控制台输出,您应该会看到Hello, world!我们添加的 shell 命令和状态Finished: SUCCESS- 现在正在从私有 GitHub 存储库中提取作业!