centos7安装jenkins和gitlab踩坑记

一、背景

  • 主机:win10
  • 虚拟机:centos7
  • 目标:成功安装gitlab&jenkins,并且可以正常利用gitlab的push event webhook触发jenkins的自动构建任务。

二、安装gitlab

首先要在CentOS系统上面安装所需的依赖:ssh、防火墙、postfix(用于邮件通知)、wegt,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问。

安装ssh协议

安装命令: yum install -y curl policycoreutils-python openssh-server

设置ssh服务开机自启动

安装命令: ystemctl enable sshd

启动ssh服务

启动命令: systemctl start sshd

安装防火墙

安装命令: yum install firewalld systemd -y

开启防火墙

开启命令: service firewalld start

添加http服务到firewalld

命令: firewall-cmd —permanent —add-service=http, pemmanent表示永久生效,若不加—permanent系统下次启动后就会失效。

重启防火墙

重启命令: systemctl reload firewalld

安装Postfix以发送邮件

安装命令: yum install postfix

将postfix服务设置成开机自启动

命令: systemctl enable postfix

启动postfix

启动命令: systemctl start postfix

安装wget,用于从外网上下载插件

安装命令: yum -y install wget

下载gitlab

命令: wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm

安装Gitlab

命令: rpm -ivh gitlab-ce-10.5.7-ce.0.el7.x86_64.rpm

修改gitlab配置文件指定服务器ip和自定义端口

vim /etc/gitlab/gitlab.rb,修改默认端口到9000

配置时区: gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’

将9000端口添加到防火墙中

命令: firewall-cmd —zone=public —add-port=9000/tcp —permanent

重启防火墙

重启命令: systemctl reload firewalld

重置gitlab

命令: gitlab-ctl reconfigure

启动gitlab

命令:gitlab-ctl restart

访问gitlab页面

在浏览器里面直接输入服务器IP和指定的端口号就可以进行访问,第一次登陆的时候会默认进入修改密码界面。默认用户是root。

到这gitlab就算安装成功啦,接下来就是

新建项目(建一个readme,写点东西)

生成ssh key(这又出事啦)

(主机和虚拟机要互相ping的通才可以下面的操作)

本来正常的生成ssh key:ssh-keygen -t rsa -C “admin@example.com”

注意:新建了gitlab的账户,默认的邮箱就是admin@example.com,可以添加自己的邮箱,然后gitlab会发送一封确认邮件,确认一下就可以啦。

接着说,上面生成ssh key的命令我是在windows上执行的,但是之前生成过一次ssh key(绑定的是公司的邮箱,也默认放在.ssh下面)。遇到的第一个问题就是:以前都是enter几下就完事,但是这次失败啦,最后会问一句是否覆盖.ssh下面的公钥和私钥,默认是no。所以,enter之后,并没有生成新的公钥和私钥。然后在.ssh同级目录下新建.ssh_test目录,在目录中新建2个文件id_rsa以及id_rsa.pub。然后再生成ssh key的时候把.ssh_test的路径填写在

Enter file in which to save the key (/c/Users/xxxx/.ssh/id_rsa):

即可。

终于ssh key生成成功啦,到gitlab的settings -> SSH Keys 添加公钥。

然后试着克隆一下吧(又出问题啦0.0)

一直要求输入密码。在网上查了一下原因:ssh-agent服务没把新产生的id_rsa包含进去。解决办法:

  • eval “$(ssh-agent -s)”
  • ssh-add 新id_rsa的路径 如:ssh-add /c/Users/xxxx/.ssh_test/id_rsa

这个时候git clone git@192.168.198.129:root/test_jenkins.git ./test_jenkins就ok啦!!

这样gitlab就安装成功并且可以正常使用的。

三、安装jenkins

首先要先安装java环境

下载jdk

我在主机上下载的,然后用xftp传到虚拟机。

创建安装目录

mkdir /usr/local/java

解压至安装目录

tar -zxvf jdk-8u251-linux-x64.tar.gz -C /usr/local/java

设置环境变量

vim /etc/profile

在末尾添加

1
2
3
4
export JAVA_HOME=/usr/local/java/jdk1.8.0_251
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使环境变量生效:

source /etc/profile

添加软连接

ln -s /usr/local/java/jdk1.8.0_251/bin/java /usr/bin/java

检查一下:

java -version

这样就ok啦。

下载jenkins

各个版本的jenkins

建议下载最新的,我也是在主机上下载的然后xftp传到虚拟机上的。jenkins-2.222.3-1.1.noarch.rpm,我下载的这个版本。

安装jenkins

rpm -ivh jenkins-2.222.3-1.1.noarch.rpm

配置端口及权限

vim /etc/sysconfig/jenkins

然后

1
2
3
4
#修改目录权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

重启一下:

service jenkins restart

启动

systemctl start jenkins

遇到的问题:

  1. 启动之后,查看状态systemctl status jenkins,发现不是正常的active (running), 而是active(exited)。 解决办法: 将8000端口添加到防火墙firewall-cmd —zone=public —add-port=8000/tcp —permanent

访问

访问jenkins地址 http::8000

执行命令 cat /var/lib/jenkins/secrets/initialAdminPassword 查看密码,然后插件安装选择推荐插件

在这可能等的时间会比较久,如果有安装失败的也可以选择continue,去创建一个用户。

安装需要的插件

首先要更新插件源,因为官方的插件源安装起来很慢 还容易失败。

升级的源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/2.222/update-center.json

jenkins系统管理下的插件管理,在线安装Gitlab Hook Plugin和Gitlab Plugin这两个插件,然后叫重启jenkins。

系统配置

在manager jenkins中选择configure System,找到gitlab,设置好Gitlab的参数,并测试时候能连接上Gitlab

API token可以在gitlab中的用户的设置中找到

新建任务

这个priviate Key就是一开始生成id_rsa私钥。

在这选的触发条件按是push后触发。

这个是构建时要执行的脚本,主要看看是否成功。

复制一下GitLab webhook URL,在这还有一个高级选项,点开然后去生成一个Secret token,这两个在gitlab中要用到。

四、配置gitlab webhook

进去项目的settings-integrations

然后点击add webhook。

测试一下:选择test下面的push event。

按道理来说应该是触发成功然后再jenkins中也可以看到构建,但是gitlab直接500啦。(0.0)

了解了一下,gitlab默认是不允许来自钩子的本地网络的请求的。

解决办法参考这两篇文章:

Integrations Webhooks not working - Error 500

Webhook does not work for me when i update to date!

我直接把办法也说了吧,就是:

然后测试一下,ok啦

去jenkins看看

over!!!!!

稍等,下一步计划——pipeline and jenkinsfile

五、参考文章