一个博客

centos部署jenkins

搞了个虚拟机玩玩jenkins,结果部署的时候遇到好多问题啊。。。这里记录一下

首先通过yum安装jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

因为jenkins是用java实现的,所以还得安装java

sudo yum install java

如果你启用了iptables服务,还得添加端口accept记录

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10086 -j ACCEPT 

然后运行命令

sudo service jenkins start

访问10086端口,jenkins就跑起来了

这里我jenkins运行在10086端口上面,默认是8080,但是被我的gitlab占用了,更改jenkins默认端口可以通过修改/etc/sysconfig/jenkins,将JENKINS_PORT="10086"改成你自己想要的端口(service启动的服务,log文件在/var/log里面,因为我start了之后查看service --status-all发现jenkins是dead status,看了log才知道原来端口冲突了)

接下来我们部署一个简单的job,代码push到gitlab的时候,触发webhook调用jenkins的build,build失败之后发送邮件给管理员,首先新建job

我装的这个jenkins版本Jenkins ver. 1.655,新建job的时候,Source Code Management默认没办法添加git,先去插件管理那里安装个Git plugin插件,因为依赖gitlab的钩子,所以还得安装GitLab Plugin插件,装了插件之后需要重启jenkins服务才能生效

Repository URL我用的是http(s)的协议,因为这是本地测试。。所以没有部署https,Credentials用用户名密码的方式认证,点add就能添加一个证书,验证的时候,jenkins一直报错我没有权限The requested URL returned error: 401 Unauthorized,谷歌了一下发现是git版本问题,导致认证失败,我本地git是通过yum安装,版本比较低,所以得先删除本地的git,然后重新下载编译一个高版本的git

make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc

如果安装报错can't locate ExtUtils/MakeMaker.pm in @INC还得先装一下依赖

yum install perl-devel

然后,因为我安装的目录不在jenkins查找git的默认目录下,所以还得手动指定git的路径

现在我们指定了仓库地址,接下来在配置webhook钩子,首先勾选build triggers对应的gitlab选项

接着,在gitlab对应的项目下面的webhook钩子添加监听事件的url

配置仓库push之后的build操作

这里的post-build是build结束之后触发的操作,这里我添加了build失败之后发邮箱通知的action

部署完毕后,我们push代码到仓库的master,jenkins接收到一个push事件,执行build操作,假如build失败之后,发邮件给指定的邮箱,一个自动化流程就构建成功了

jenkins还能实现slave的自动构建,我还没测试过,等尝试了之后再添加试用体验

160625 append:

	Unable to find remote helper for https

安装curl-devel,重新编译git

161128 append:

安装 gitlab-hook-plugin 然后所有项目指定webhook路径[jenkins_server]/gitlab/build_nows,这样子所有钩子操作都会通过这个接口再根据对应的url转发到对应的job过去,如果出现报错 Hook execution failed: no project references the given repo url and commit branch,更新插件至 snapshot 版本 就行,为了保险起见,gitlabjenkins 我也跟着升级到最新版本

参考文章:

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions

https://www.howtoforge.com/how-to-install-the-latest-git-version-on-centos

https://madcoda.com/2013/09/cant-locate-extutilsmakemaker-pm-while-compile-git

https://my.oschina.net/moooofly/blog/228875