基于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 [email protected]
这里需要:三次回车
查看公钥:cat id_rsa.pub
将公钥放到密钥栏里,这样就可以使用ssh方式来上传代码了:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKt4gqFEGve5I9m7S+j5Rtd78h3EsaUkHEJcuVjVEQrMmmQbbHOX7ZVPcm6+oBiWi31tB7OMajNg+qSELg8fYECDePLLeBwrPUuMLt7k7nJZ/YmbZ241d2h8zTPZ+xyQ9NPfatWzr6NpjdCXjrMz9+8w4BiCAdXIC2lVr0Aef50gpgaRwy18CZrV8P/qynv8N2r/zGge6xKgbTr11AVCp2SEkEI5E1NpyxBEyrj32/LWOODZ84NSLF8SYlbMIE12xwo+ueVmhhQSB6XryrsF5AYGcESICHmvzMO76JSGnQPwmxyPZa2d44cOMOj2HNB0m2I2P7dDTJ37eFWzZzSU8h
13、克隆代码仓库,然后测试是否能够上传代码到gitlab:
git clone [email protected]:root/wyl.git
修改文本内容,提交到gitlab上看能否同步上去:
git add README.md 提交到暂存区
git commit -m "add README.md" 直接提交
git config --global user.email [email protected]
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 Parameter、Maven 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文件,发现之前的用户[email protected]被添加进去,如下图:
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 [email protected]:root/wyl.git
cd wyl/
echo ‘测试Jenkins‘ > index.html
git add .
git commit -m ‘add index.html‘
git push
#提交之后去jenkins页面看看
如下图是构建成功的项目:
原文地址:https://www.cnblogs.com/wyl-520/p/12149758.html