详细介绍说明gitlab安装+jenkins安装搭建持续化集成环境
平台:centos6
1,安装git。
yum install git -y
这里我安装的比较新的版本git version 2.11.0-rc0 ,可以下载https://download.21yunwei.com/tools/git_install.sh执行安装。
2,gitlab安装
可以参考《CentOS服务器上搭建Gitlab安装步骤、中文汉化详细步骤、日常管理以及异常故障排查》 这里由于是centos 6.8,采用gitlab官网提供的方式安装,这里选择安装:
版本。
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-8.9.0-ce.0.el6.x86_64.rpm vim /etc/gitlab/gitlab.rb #修改external_url 'http://47.52.x.x' 改成IP地址访问gitlab gitlab-ctl reconfigure
设置密码以后可以登录。
登录进去创建git项目,本地linux测试机设置git后添加本地key到gitlab的ssh-key中,便于拉取、提交代码等。
[[email protected]_salt_zabbix gitlab]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqxGy8OtHrL7vw7oNQtvN9PU5aW6k4wXJZ3MvNlXIzXmv2Y+Kkqx172oc1WOVYaNfa0sfRhTk/6Z/tZwhHie/c8KjL3B3luf0TtuzCKd7ZrMlQfEWoIv7Mh0G54hrmPakYZ7XFnix3LYgA4CSCr4QgtXzJAAVrQ/Byeq0VqaBUcWYR66DMJ1SUYWuFTc+GLqCgAAen+BK56TuA3cESSMlv6Aq77e1Swt1EEKG4dTCOLf3x1yHYAgcPqzzrBakPd0ACU48jX8QTUTu0tUPRqFamjUlTFZK6zLKuoyyeA0RuzQtBN8XU9g48XbHW/5yv67opUMhVREhVQ== [email protected]_salt_zabbix [[email protected]_salt_zabbix gitlab]# git clone [email protected]:21yunwei/test.git Cloning into 'test'... warning: You appear to have cloned an empty repository. [[email protected]_salt_zabbix gitlab]# cd test/ [[email protected]_salt_zabbix test]# echo "hello gitlab" >README.md [[email protected]_salt_zabbix test]# git add . [[email protected]_salt_zabbix test]# git commit -m "add file README.md" [master (root-commit) a119f2d] add file README.md 1 file changed, 1 insertion(+) create mode 100644 README.md [[email protected]_salt_zabbix test]# git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 228 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To 47.52.x.x:21yunwei/test.git * [new branch] master -> master
查看已经提交成功:
3,安装jenkins。
jenkins安装可以参考《Linux 系统centos版本环境下Jenkins安装》,两个步骤,一是安装java,二是安装rpm包的jenkins。
3.1 安装java
yum install -y java-1.8.0-openjdk.x86_64
3.2安装jenkins
可以到http://mirrors.jenkins-ci.org/redhat/下载需要的版本。这里以
rpm -ivh http://mirrors.jenkins-ci.org/redhat/jenkins-2.30-1.1.noarch.rpm 为例安装。
安装完以后编辑jenkins配置文件修改端口(默认8080,避免和其他冲突,我们改成9090)以及权限配置文件其他地方,比如:
JENKINS_PORT="9090"
启动jenkins:
[[email protected] src]# /etc/init.d/jenkins start Starting Jenkins [ OK ]
访问jenkins:
安装常用组件,根据需要进行测试即可。这里以我们的测试环境为例,安装如下插件:
Git plugin和GitLab Plugin插件:我们以git为私服。
Publish Over SSH 以及SSH plugin插件:用于ssh传输以及执行shell命令。
Gitlab Hook Plugin: web hook 插件。
安装比较简单,后续的配置比较重要,这里进行下详细配置说明,避免新朋友用到以后遇到很多坑。
这里自己乱测试出现问题后关于解决jenkins的一些配置细节,实际这里的123可以忽略(主要是git仓库认证那里直接采用用户+jenkins root私钥认证即可实现):
1,修改jenkins的shell权限,改成bash,默认false。
jenkins:x:494:494:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
2,切换登录jenkins: su – jenkins 。
进去以后生成密钥并设置免密钥登录gitlab和jenkins的root,以及执行shell命令时的目标服务器,否则执行构建时涉及的执行shell命令会执行失败,以及rsync推送失败。这里我们设置gitlab和jenkins是同一台服务器,就执行一个操作即可:
-bash-4.1$ ssh-keygen -t rsa -bash-4.1$ cat .ssh/id_rsa.pub -bash-4.1$ ssh-copy-id -i .ssh/id_rsa.pub [email protected] #执行多次,加入到所有的目标服务器。
设置完成以后,将这个密钥也加入到gitlab的ssh-key中,便于jenkins服务器git clone代码。后期注意jenkins用户的提权 。
3,说明:采用root运行jenkins
期间过程有一个大坑:
jenkins的守护进程采用jenkins用户运行的时候,无法执行chown等一些操作,简单的一个操作步骤为:
vim /etc/sysconfig/jenkins
设置$JENKINS_USER=”root”
重启服务器!
这里遇到的坑是只重启jenkins服务不管用,必须重启服务器才可以。期间还以为搞错了,按照网上搜索的方法修改N次和重启jenkins服务不起作用,最后重启服务器搞定。
3.3,jenkins执行测试:
首先创建一个自由风格的项目
创建好以后,设置如下,比如添加仓库以及执行构建(这里只是远程执行一个shell测试输出当前服务器时间判断是否构建成功):
添加构建,我们执行另外一个香港服务器的shell脚本以做测试,脚本内容:
[[email protected]_usa_ios_01 /]# cat /home/yunwei/test.sh #!/bin/bash echo `date` >> /root/1.txt
保存,执行立即构建查看效果:
执行shell脚本的服务器查看执行结果:
[[email protected]_usa_ios_01 /]# cat /root/1.txt Tue Jul 4 15:21:46 CST 2017 Tue Jul 4 15:22:08 CST 2017 Tue Jul 4 15:22:11 CST 2017 Tue Jul 4 15:22:14 CST 2017
构建这块设置完成。但这是手工构建,明显不能满足需要,生产环境中我们需要的是触发构建或者参数构建或者是定时构建等,这个我们需要进行一个触发构建案例。
3.4,触发式jenkins构建
这种比较适合于发布一些不需要编译的php等场景,只需要git推送到gitlab代码以后,web钩子触发以后,jenkins立即进行构建项目并推送代码即可。
首先,我们在jenkins的项目那里设置token:
设置完成以后到jenkins–》系统管理–》Configure Global Security,将“防止跨站点请求伪造”取消,否则jenkins会认为gitlab的请求不合法,且gitlab将web hooks测试也无法通过。
再次找到当前jenkins的用户名id,生成web hooks地址:
到jenkins的控制台–》用户》点击登录信息,show api token,可以看到如下信息:
下边,根据刚才看到的用户信息以及我们设置的token生成钩子地址:
http://admin:[email protected]:9090/job/21yunwei-test/build?token=test
这个地址需要加入到gitlab的web hooks里边:
进入以后,将生成的地址写入url,触发器选择push event和merge request event就可以了:
保存。点击测试Webhooks 旁边的test,如果有:
Hook executed successfully: HTTP 201
生成,说明这个钩子是生效的,意味着我们以后每次push或者合并请求等操作,这个钩子会出发,jenkins就会立即进行一次构建。
下边我们随便git 添加或修改文件,进行git push,发现触发器已经触发jenkins进行构建了:
触发构建完成。
当然,也可以使用统一的钩子地址:http://jenkinsurl/gitlab/build_now 适合gitlab自动触发操作不同分支情况
这套git+gitlab+jenkins 基本可以满足常规非参数化编译的生产环境需要了,尤其适合一些php项目进行代码发布,仅仅需要针对构建命令那里设置推送代码即可。