gitlab+jenkins自动化部署

Posted wyl-520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitlab+jenkins自动化部署相关的知识,希望对你有一定的参考价值。

基于gitlab和jenkins的自动化部署

 

Gitlab基于Jenkins自动化部署教程:

https://blog.csdn.net/aaaaaab_/article/details/82012044

https://www.cnblogs.com/dengbingbing/p/10448185.html

 

GitLab是一个代码仓库,用来管理代码。

Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮助开发团队更高效的集成和发布代码。

一、GitLab介绍

GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。
功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。对于软件工程质量管理非常重要。
版本:GitLab 分为社区版(CE) 和企业版(EE)。
配置:建议CPU2核,内存2G以上。

二、Gitlab的服务构成:

nginx:静态web服务器。
gitlab-shell:用于处理Git命令和修改authorized keys列表。(Ruby)
gitlab-workhorse: 轻量级的反向代理服务器。(go)

GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。

logrotate:日志文件管理工具。
postgresql:数据库。
redis:缓存数据库。
sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)

三、gitlab的安装配置

1、安装依赖性:

yum install curl policycoreutils openssh-server openssh-clients postfix

 

2、查看服务状态确保开启:

systemctl status postfix.service

 

3、安装工具包:

yum install -y net-tools

 

4、下载安装gitlab:

gitlab开源软件镜像站:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

 

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

 

 

rpm -ivh gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm

 

yum install policycoreutils-python

 

再次进行安装:rpm -ivh gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm

 

5、编辑配置文件写入当前主机IP(注:下面第8部可以一起编辑):

vim /etc/gitlab/gitlab.rb

 

6、初始化gitlab:gitlab-ctl reconfigure

 

7、重载服务:gitlab-ctl restart

 

8、修改gitlab仓库路径:

创建/data/gitlab目录

mkdir -p /data/gitlab

修改gitlab配置文件

vim /etc/gitlab/gitlab.rb

git_data_dir的path里面添加 "/data/gitlab"(注:这里去掉前面的#符号)

 

停止当前gitlab,重新加载配置

gitlab-ctl stop

 

gitlab-ctl reconfigure

 

重新加载后,会发现在/data/gitlab目录下多出一个repositories目录

 

最后启动gitlab即可

gitlab-ctl start

9、在浏览器输入IP地址进行验证,是否安装成功,另外输入8位密码:

(我这里是admin123456

 

10、设置用户密码:root,admin123456

 

登陆成功:

 

11、创建一个新工程:

 

 

12、配置gitlab免密连接:

1)前提:得有一个代码仓库,然后在仓库创建分支并创建文件,这里已存在

2)其次,得配置一个ssh公钥到gitlab上,这样才能模拟开发上传代码到gitlab

使用ssh-keygen生成私钥和公钥:(rsa加密算法生成)

ssh-keygen -t rsa -C 1483415221@qq.com

这里需要:三次回车

 

 

查看公钥:cat id_rsa.pub

 

将公钥放到密钥栏里,这样就可以使用ssh方式来上传代码了:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKt4gqFEGve5I9m7S+j5Rtd78h3EsaUkHEJcuVjVEQrMmmQbbHOX7ZVPcm6+oBiWi31tB7OMajNg+qSELg8fYECDePLLeBwrPUuMLt7k7nJZ/YmbZ241d2h8zTPZ+xyQ9NPfatWzr6NpjdCXjrMz9+8w4BiCAdXIC2lVr0Aef50gpgaRwy18CZrV8P/qynv8N2r/zGge6xKgbTr11AVCp2SEkEI5E1NpyxBEyrj32/LWOODZ84NSLF8SYlbMIE12xwo+ueVmhhQSB6XryrsF5AYGcESICHmvzMO76JSGnQPwmxyPZa2d44cOMOj2HNB0m2I2P7dDTJ37eFWzZzSU8h

 

 

 

13、克隆代码仓库,然后测试是否能够上传代码到gitlab:

git clone git@192.168.5.11:root/wyl.git

 

 

修改文本内容,提交到gitlab上看能否同步上去:

 

git add README.md 提交到暂存区

git commit -m "add README.md" 直接提交

 

git config --global user.email 1483415221@qq.com

git config --global user.name root

git commit -m "add README.md"

git push

这里是用shell编写的一个文本提交至gitlab:

echo 123456 > rc.txt

git add .

git commit -m "rc.txt"

git push

 

 

 

 

到这里gitlab就配置完成。

 

四、Jenkins介绍

1、Jenkins 是什么?   

 Jenkins 是一个可扩展的持续集成引擎。

2、主要用于:    

持续、自动地构建/测试软件项目。     

监控一些定时执行的任务。

3、Jenkins 拥有的特性包括:    

易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。     

易于配置-所有配置都是通过其提供的web界面实现。     

集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。     

生成JUnit/TestNG测试报告。     

分布式构建支持Jenkins能够让多台计算机一起构建/测试。     

文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。     

插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

4、Jenkins 安装部署方式(以下4种方式后续都会写到):    

(1)直接下载war包jenkins.war部署到servlet容器中,如tomcat,下载地址https://jenkins.io/download    

(2)下载war包使用命令直接运行war包,java -jar jenkins.war    

(3)windows下载zip包解压运行jenkins.exe即可安装成windows服务    

(4)下载rpm包在linux下安装并配置服务

五、Jenkins安装配置

教程:https://blog.csdn.net/xishaoguo/article/details/88577459

1、下载Jenkins包:https://jenkins.io/zh/download/

 

 

wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm

 

如果这里下载速度过慢,也可以用rz本地直接上传。

2、安装Jenkins:

sudo rpm -ih jenkins-2.190.3-1.1.noarch.rpm

 

自动安装完成之后:

/usr/lib/jenkins/jenkins.war    WAR包

/etc/sysconfig/jenkins       配置文件

/var/lib/jenkins/       默认的JENKINS_HOME目录

/var/log/jenkins/jenkins.log    Jenkins日志文件

3、启动Jenkins:sudo service jenkins start

 

解决办法:修改java路径即可

find / -name jenkins

 

cd /etc/rc.d/init.d/

 

vim jenkins

 

上图是默认路径,修改为本机java路径,如下图一步到位即可:

 

sudo service jenkins start

systemctl daemon-reload           按提示:需重新加载单元

 

service jenkins start

service jenkins stop   停止Jenkins服务

service jenkins restart   重启Jenkins服务

 

这里如果防火墙未关闭,需先关闭,再启动jenkins:systemctl stop firewalld.service

查看Jenkins是否正常运行,如下图表示未运行:systemctl status jenkins

 

修改Jenkins端口号:vim /etc/sysconfig/jenkins

 

service jenkins start

systemctl status jenkins

 

浏览器验证失败,如下图:

 

很多人说gitlab很占内存,难道我的2G内存也被占完了吗?于是使用free命令看了一下

free -h

 

发现我的运行内存就剩77M了,于是停掉gitlab:

gitlab-ctl  stop

 

再次查看有可用内存了:free -h

 

然后这里需要再次启动Jenkins:

service jenkins start

systemctl status jenkins

 

再次在浏览器验证,如下图表示成功:192.168.5.11:8082

 

4、网页配置Jenkins:

根据提示在虚拟机获取初始化密码:cat /var/lib/jenkins/secrets/initialAdminPassword

 

复制粘贴进去,进行下一步:

52b6aedc282f4e2ea322a2d563c95a16

 

 

这里自动安装插件,安装失败点击重试,但有时候因为网络原因可以跳过这一步:

 

创建管理员用户,保存完成:

 

 

 

到这里Jenkins就安装完成啦。

5、由于上面插件加载失败,这里需要先重新登录,再安装Jenkins所需插件:

 

我的Jenkins插件上面未安装成功,这里重新安装,点击系统管理--插件管理--搜索--勾选安装即可:

需要安装的插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git ParameterMaven Integration plugin

 

 

 

 

插件安装失败,有两种原因:

1、请求超时,网络正常的时候重新安装即可;

2、安装时没有依赖的安装包。

如果Jenkins多次安装都不行需要换种方式解决:

https://blog.csdn.net/KingBoyWorld/article/details/77923615

Jenkins插件下载地址:

http://updates.jenkins-ci.org/download/plugins/

如下图,所需插件均已安装完成:

 

6、添加完插件重启jenkins,开始添加要部署代码的主机,注意一定是要能够通过ssh登陆的用户

添加主机:系统管理 - 系统设置 找到Publish over SSH设置免密即可,如下图:

 

设置好之后,测试报错:

 

这是由于服务器上的sshd服务没有开启导致的,登录到服务器上执行命令

sudo service sshd start   //开启sshd服务

将公钥拷贝到authorized_keys文件发现之前的用户1483415221@qq.com被添加进去,如下图:

cat id_rsa.pub >> authorized_keys

 chmod 600 authorized_keys

 

 

7、系统管理--->全局工具配置

修改maven默认settings.xml文件,配置git、jdk、maven工具后保存(不要勾选自动安装)

 

Git配置按下图所示环境走:

 

8、Jenkins中创建一个job:

 

输入项目名,构建一个自由风格的项目:

 

以下是Git配置:

 

 

 

构建触发器:

http://192.168.5.11:8082/project/testwyl

这个URL待会配置gitlab会用到,如下图所示用正则表达式生成gitlab webbook的安全令牌ef04574b270a8be397af2c7789493f8d(每次都生成新的)

 

 

 

当前代码部署到的目录,然后重启服务,如下图:

 

 

配置gitlab:

 

取消ssl勾选,因为我们没有在Jenkins上配置https,最后点击增加web钩子

 

 

这里报错是因为使用的最新版本的gitlab,这是因为新版的gitlab为了安全默认禁止了本地局域网地址调用web hook,我们在设置里允许就行,具体步骤如下:

 

再次添加web钩子,然后进行test,如下图表示配置成功了:

 

 

如下图,测试的记录共3次:

 

9、测试提交代码是否会部署到远程主机:

git clone git@192.168.5.11:root/wyl.git

cd wyl/

echo ‘测试Jenkins‘ > index.html

git add .

git commit -m ‘add index.html‘

git push

#提交之后去jenkins页面看看

 

如下图是构建成功的项目:

以上是关于gitlab+jenkins自动化部署的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab+jenkins持续集成+自动化部署

Jenkins+Gitlab+Ansible自动化部署

搭建Jenkins,Gitlab自动化打包部署项目

搭建Jenkins,Gitlab自动化打包部署项目

gitlab+gitlab-runner搭建自动化部署

自动化部署之Gitlab+Jenkins+Docker