关闭

Jenkins中Git Plugin配置的几个小问题

标签: JenkinsGitPluginCI
11074人阅读 评论(7) 收藏 举报
分类:

  最近持续集成出现了一些问题,翻出来看了一下,发现之前许多配置都有点问题,导致在新环境的配置中屡屡失败,经过一番测试总算配置成功。记录其中几个坑,主要是关于Git的一些配置,供日后查阅。

  CI(Continuous Integration)持续集成其实是由一系列的最佳实践所构成,包括了源代码的版本控制和管理、自动化构建、自动化测试、代码审查、自动发行和部署、持续反馈等等,对于快速迭代的项目非常有效。在CI中比较常用的一个工具是Jenkins(前身是Hudson,由于版权原因更名为Jenkins)。

 持续集成的第一步一般需要将源码从代码托管服务器下载下来,Jenkins默认安装之后并没有支持GIT代码托管工具,需要安装一个对应的插件,可以安装Git Plugin,关于Git Plugin的介绍可以参考:https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

安装完成之后,当我们使用Jenkins创建项目之后,在填写好Git仓库地址之后,当执行构建操作的时候,会发现代码根本clone不下来,构建过程一直停在代码下载这一步,下面看一下如何解决这个问题,在此之前先介绍一些关于GIT与SSH等内容。

  • TortoiseGIT

在Windows系统下,使用较多的一个图形界面的GIT工具是TortoiseGIT,在安装它的过程中,一般会出现下面的界面:


安装程序让我们选择使用哪种ssh的客户端,TortoiseGIT默认的客户端是TortoiseGItPlink,如果我们选择这一项,那么当我们使用 Git 命令行 或者 使用TortoiseGit去Clone代码的时候,使用的并不是同一个客户端。如果选择的是下面的选项OpenSSH,那么二者就是相同的,都是OpenSSH客户端。之所以提到这一点是因为这里的选择对后续我们设置ssh key的时候有点影响,当然究竟TortoiseGit使用哪一个ssh客户端,在安装完成之后也可以配置,具体的配置可以在TortoiseGit的settings中找到,如下图所示:



  • SSH Key

SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。Git代码可以通过SSH协议下载到本地,它提供两种方式:

1. 常规的基于密码的方式
2. 使用密钥的方式

当我们在Jenkins中使用Git Plugin插件的时候,不能使用基于密码的方式,使用这种方式会让代码clone过程一直卡住,实际上是ssh需要我们输入密码以便它能继续,但是在构建过程中根本没办法与它进行交互,输入密码,因此我们只能使用第二种方式

关于 ssh key的产生,可以使用下面的方法:

1. 首先在Git客户端安装目录的bin文件夹中找到 ssh-keygen,这个工具是用来生成ssh的公钥和私钥的,运行下面的命令:
 $ssh-keygen -t rsa -C “youraccount@gmail.com”
之后,设置保存的位置,键入密码(Jenkins使用git plugin密码必须为空,直接回车就可以),之后会生成两个文件 id_rsa和id_rsa.pub



2. 完成之后需要在托管Git 仓库的服务器上添加 公钥,添加一般在登录账户的设置里面。

  • 关于TortoiseGit中TortoiseGitPlink的设置

上面讲的使用ssh-keygen是用来产生OpenSSH客户端的公钥和私钥的,如果我们使用TortoiseGit并配置GitPlink,那么我们需要产生一个putty客户端的key,也就是产生一个ppk的文件,关于这方面的资料很多,可以参考:GitLab 服务器下客户端TortoiseGit配置和使用教程

  • Jenkins Git Plugin For Windows的设置

Git Plugin在Windows上的设置需要注意几点:

1. Jenkins安装在Windows上是以服务的方式安装的,并且它安装启动的账户是 Local System ,并非是你当前的账户,假设我当前的用户是frank,Jenkins运行起来的用户其实并不是frank,而是Local System账户,但是这个账户并没有 SSH,所以导致代码在构建过程中clone的时候一直停在那里。

2. 为了解决这个问题第一个方案就是将 用户目录下(也就是 c:\users\frank目录)的 .ssh文件夹拷贝到 Local System的用户目录下,但是这个用户目录在哪儿呢,在我的计算机中(使用的是64位的Win7系统)这个目录位于:C:\Windows\SysWOW64\config\systemprofile,只需要把 .ssh目录拷贝到这个目录就可以了(需要注意的是.ssh目录中包括公钥、私钥和known_hosts文件)

3.这个known_hosts文件在你在网站上添加完公钥之后,使用git clone命令获取一份代码的时候,命令行就会给出提示,当你输入yes 之后自动会生成的。

4. 除了上述方法之外,经过测试发现将.ssh目录中的文件拷贝到git安装目录下的.ssh目录中也是可以的,应该是Local System账户读取了git安装目录中的.ssh。

5. 最后需要注意配置完之后重启一次Jenkins,在Jenkins的首页地址栏后面添加 /restart确认之后就重启了,重启之后当重新构建的时候代码就可以clone下来。


0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:303993次
    • 积分:4435
    • 等级:
    • 排名:第6702名
    • 原创:138篇
    • 转载:0篇
    • 译文:4篇
    • 评论:122条
    博客专栏
    osgNeHe

    文章:52篇

    阅读:83218
    最新评论