GitLab+Jenkins结合构建持续集成(CI)环境
git版本控制的使用
链接地址:https://www.cnblogs.com/Mercury-linux/p/12623343.html
Jenkins官方:https://jenkins.io/
GitLab概述:是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开或者私人项目。Ruby on Rails 是一个可以使开发、部署、维护 web应用程序变得简单的框架。
GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团体对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它提供一个代码收集功能可以轻松实现代码复用,便于日后需要的时候进行查找。
GitLab官网:
二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,他们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
-
不同点:
GitHub 如果要使用私有仓库,是需要付费的。 GitLab 可以在上面创建私人的免费仓库。
git 是一种版本控制系统,是一个命令,是一种工具
gitlib 是用于实现git功能的开发库
github 是一个基于git实现的在线代码托管仓库,包含一个网站页面,向互联网开放
gitlab
持续集成系统的工作流程大概分为以下几步:
-
-
Gitlab 随后触发 Jenkins master 节点进行一次 build。(通过 web hook 或者定时检测)
-
Jenkins master 结点将这个 build 人为分配给若干注册的 slave结点中的一个,这个 slave结点根据一个事先设置号的脚本进行 build。这个脚本可以做的事情很多,比如编译,测试、生成测试报告等等。这些原本需要手动完成的任务都可以交给Jenkins 来做。
-
整体实验环境部署:
主机名 | 公网ip | 内存 | 服务 |
lb01 | 10.0.0.5 | 2G | 数据库、负载均衡、Jenkins上线 |
web01 | 10.0.0.7 | 1G | tomcat |
web02 | 10.0.0.8 | 1G | tomcat |
es01 | 10.0.0.240 | 3G |
#配置扩展源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #安装gitlab和依赖包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm yum localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm -y
- gitlab配置文件
vim /etc/gitlab/gitlab.rb #设置访问url和关闭prometheus external_url 'http://gitlab.oldqiang.com' #如果安装普罗米修斯全家桶需要4G内存 prometheus_monitoring['enable'] = false #配置gitlab通过smtp发送邮件 gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = '1354586675@qq.com' gitlab_rails['gitlab_email_display_name'] = 'china' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "1354586675@qq.com" gitlab_rails['smtp_password'] = "xxxxxx" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true #应用重新配好的配置并重启gitlab gitlab-ctl reconfigure
注:重新配置应用程序。修改gitlab服务配置文件后,都需要重启执行gitlab-ctl reconfigure
命令。让各个服务的配置文件,重新加载一下配置文件
unzip AEIOUAEIOU-xhang_gitlab-v12.3.5-zh.zip #查看当前汉化版本,如果gitlab版本太新部分不能汉化 cat xhang_gitlab/VERSION 12.3.5 gitlab-ctl stop \cp -a xhang_gitlab/* /opt/gitlab/embedded/service/gitlab-rails/ #这里会有两个报错,因为这里两个软连接 gitlab-ctl start netstat -lntup tcp 0 0 127.0.0.1:9229 0.0.0.0:* LISTEN 10859/gitlab-workho tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 10916/unicorn maste tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10877/nginx: master tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 10895/sidekiq 5.2.7 tcp 0 0 127.0.0.1:9236 0.0.0.0:* LISTEN 10846/gitaly tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6693/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7128/master tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 10877/nginx: master
注:这里需要等待!8080端口起不来会出现 502 报错
主页面汉化完成:
彻底汉化:
根据配置推送代码项目,将项目推送到仓库
#进行解析 vim /etc/hosts 10.0.0.88 class.com #准备目录和项目 mkdir /opt/shop cd /opt/shop 2000.png 21.js icon.png img index.html sound1.mp3 #上传仓库 git config --global user.name "Administrator" git config --global user.email "admin@example.com" git init git add . git commit -m "Initial commit" git remote add origin http://class.com/shop/shop.git git push -u origin master #输入用户名和密码
推送结果:
- ssh推送:
#主机创建密钥 ssh-keygen <--一路回车 cat /root/.ssh/id_rsa.pub 将内容添加到gitlab仓库的SSH密钥 #配置仓库 git init git remote add origin git@class.com:root/bbs.git git add . git commit -m "Initial commit" git push -u origin maste
加入用户:
#备份 gitlab-rake gitlab:backup:create #这里有些敏感文件不会去备份,需要手动备份 #删一个库在恢复 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq #注:执行下面一条命令会删除库中的表和数据 #BACKUP内容:时间戳+时间+版本 gitlab-rake gitlab:backup:restore BACKUP=1585361881_2020_03_28_12.3.5 gitlab-ctl start unicorn gitlab-ctl start sidekiq vim /etc/gitlab/gitlab.rb gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 gitlab-ctl reconfigure netstat -lntup #迁移云主机 先备份,云主机安装相同版本,恢复
#升级: wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.9-ce.0.el7.x86_64.rpm yum localinstall gitlab-ce-12.9.1-ce.0.el7.x86_64.rpm -y #gitlab会备份数据并重启 ll /var/opt/gitlab/backups/ -rw------- 1 git git 1781760 Mar 28 10:18 1585361881_2020_03_28_12.3.5_gitlab_backup.tar -rw------- 1 git git 133120 Mar 28 10:56 1585364188_2020_03_28_12.3.5_gitlab_backup.tar drwx------ 7 git git 131 Mar 28 10:30 tmp #查看当前gitlab版本: rpm -qa | grep gitlab gitlab-ce-12.9.1-ce.0.el7.x86_64 #如果设置汉化不彻底可以在汉化一次
注:这里gitlab需要启动一会出现8080端口在查看网页
推荐参考地址:http://john.albin.net/git/convert-subversion-to-git
svn教程地址:https://www.runoob.com/svn/svn-intro.html
安装svn客户端
yum install subversion -y svn --version
初始化仓库
#手动新建版本库目录 mkdir /svn/repo -p #创建版本库 svnadmin create /svn/repo
svn服务配置文件svnserver.conf,该文件仅由一个[general]配置段组成。
cd /svn/repo/conf vim svnserve.conf [general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = /svn/repo [sasl]
-
-
auth-access: “用户”,取值范围为:“write (可读可写)”、“read (只读)”和“none (无访问权限)”,默认值:write 。
-
authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。这里使用相对路径
-
realm:
用户名口令文件passwd
#用户名口令文件由svnserve.conf的配置项password-db指定,默认为conf目录中的passwd。由[users]配置段组成。 vim passwd [users] admin = 123456 <-- 授权用的 test = 123456 <-- 账户密码
权限配置文件authz
#由svnserve.conf的配置项authz-db指定,默认为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。 vim authz [/] admin = rw test = r
注:[/]
,则表示所有库的根目录
svnserve -d -r /svn/repo #创建git仓库 mkdir /opt/git git svn clone svn://10.0.0.100 --username=admin --no-metadata --authors-file=/opt/git/password.txt /opt/git/ cat password.txt admin=zhangsan<296917342@qq.com>
-
-
--authors-file:svn用户列表
-
/opt/class:
jdk下载地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
jdkrpm包网盘链接:https://pan.baidu.com/s/1zyFC-mTVqFPfFnTJQXaa4g
yum localinstall jdk-8u102-linux-x64.rpm -y java -version
#安装tomcat mkdir /app wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz tar xf apache-tomcat-8.5.53.tar.gz -C /app/ ln -s /app/apache-tomcat-8.5.53/ /app/tomcat cd /app/tomcat/webapps/ rm -rf ROOT wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/latest/jenkins.war mv jenkins.war ROOT.war /app/tomcat/bin/startup.sh netstat -lntup | grep 8080
注:这里Jenkins的信息都放在了root目录下的.Jenkins
下。
- 访问加速设置,插件安装将指向清华源
注:只有页面插件安装才会出现updates
这个目录。
cd /root/.jenkins/updates/ sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json #重启tomcat
rm -rf /root/.jenkins tar xf jenkins-data.tar.gz -C /root/ #登录: admin 123456
概述:一个项目,创建一个job,一个job就是一个自动化上线的流程(拉取-html-打包-scp-tar)
构建job:
源码管理 | 构建触发器 | 构建环境 | 构建 | 构建后操作 | |
关闭job | 对接代码仓库 | gitlab代码仓库 | 构建前准备操作 | shell脚本 |
构建任务:
用户和密码添加:
密钥添加:
cat /root/.ssh/id_rsa #内容添加到凭证
#Jenkins主机创建并分发密钥实现免输入传输 ssh-keygen ssh-copy-id root@10.0.0.7 ssh-copy-id root@10.0.0.8
#负载均衡主机配置文件 vim /etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream java { server 10.0.0.7:80; server 10.0.0.8:80; } server { listen 80; server_name zrlog.oldedu.com; root html; index index.html index.htm; location / { proxy_pass http://java; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } #网站主机07,08 yum install nginx -y systemctl start nginx systemctl enable nginx #删除默认网页修改首页文件 rm -rf /usr/share/nginx/html/* echo "web01" > index.html echo "web02" > index.html #刷新查看
- 脚本思路
#Jenkins主机将源码压缩到 mkdir /data <--压缩文件目录 cd /root/.jenkins/workspace/shop tar zcf /opt/data/shop.tar.gz * scp -rp /opt/data/shop.tar.gz 10.0.0.8:/opt/data/ #网站主机 mkdir /jenkins_data <--存放压缩包目录 mkdir /code/shop -p <--网站代码目录 chmod 755 -R /code/ /usr/share/nginx/html <--nginx默认网站目录,code目录软链接地址 #解压 tar xf /opt/data/shop.tar.gz -C /code/shop rm -rf /usr/share/nginx/html ln -s /code/shop /usr/share/nginx/html <--代码更新方式目录直接软连接 ll /usr/share/nginx <--查看软链接情况
mkdir /server/scripts -p vim auto_code_update_html.sh #!/bin/bash #执行脚本默在这个目录下 # cd /root/.jenkins/workspace/shops/shop project=$1 tag=$2 #mkdir /data tar zcf /data/${project}-${tag}.tar.gz * IP="10.0.0.7 10.0.0.8" #web主机操作 for n in `echo $IP` do #mkdir /data scp -rp /data/${project}-${tag}.tar.gz root@${n}:/data ssh root@$n " mkdir -p /code/${project}-${tag} && \ tar xf /data/${project}-${tag}.tar.gz -C /code/${project}-${tag} && \ rm -rf /usr/share/nginx/html && \ chmod 755 -R /code/ && \ ln -s /code/${project}-${tag} /usr/share/nginx/html" done #执行脚本测试 sh -x /server/scripts/auto_code_update_html.sh
- Jenkins构建
vim /server/scripts/auto_code_undo_html.sh #!/bin/bash # cd /root/.jenkins/workspace/shops/shop project=$1 tag=$2 IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do ssh root@$n "rm -rf /usr/share/nginx/html && \ ln -s /code/${project}-${tag} /usr/share/nginx/html" done
- 添加文本参数,选择版本号
- 构建时执行的shell
- 构建
注:这里如果项回退版本,之前的版本目录都必须要有
配置集成:
修改文件:
查看结果:
rpm -ivh jdk-8u102-linux-x64.rpm mkdir /app wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz tar xf apache-tomcat-8.5.53.tar.gz -C /app/ ln -s /app/apache-tomcat-8.5.53/ /app/tomcat /app/tomcat/bin/startup.sh
- maven环境
maven下载地址:https://maven.apache.org/download.cgi
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local ll /usr/local/apache-maven-3.6.3/ ln -s /usr/local/apache-maven-3.6.3/ /usr/local/maven ll /usr/local/maven/ vim /etc/profile #文件结尾添加两行 export M2_HOME=/usr/local/maven export PATH=${M2_HOME}/bin:$PATH source /etc/profile mvn -v #更新源为阿里源 vim /usr/local/maven/conf/settings.xml #将所有内容复制到<mirrors>之间 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
- 创建码云仓库并将java代码上传上去
mkdir /opt/java_git tar xf SpringBootWeb.tar.gz -C /opt/java_git cd /opt/java_git <--将需要上传的源码放在这里--> #创建码云仓库并将信息信息和地址写在目录 git config --global user.name "weijixiang" git config --global user.email "1354586675@qq.com" git init git add . git commit -m "first commit" git remote add origin git@gitee.com:weijixiang_god/java.git git push -u origin master
注:这里主机的ssh要在码云上的ssh公钥配置好,后去拉取不用输入密码,码云打上标签
- jenkins安装maven插件
配置maven
正在构建
#编译文件地址 /root/.jenkins/workspace/springBoot/target/SpringBootWeb.war #tomcat配置文件允许使用软连接 vim /app/tomcat/conf/context.xml <Context> <Resources allowLinking="true" /> </Context> #重启
- 测试脚本
注:此脚本为了验证是否可行,结合Jenkins需要修改参数
vim auto_code_update_java.sh #!/bin/bash #project=$1 tag=v1.0 packname="SpringBootWeb" dir="/root/.jenkins/workspace/springBoot/target/SpringBootWeb.war" IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do scp -rp $dir root@${n}:/data ssh root@$n "mkdir -p /code/$packname-$tag && \ unzip -d /code/$packname-$tag /data/${packname}.war && \ rm -rf /app/tomcat/webapps/class && \ ln -s /code/$packname-$tag /app/tomcat/webapps/class && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
vim /server/scripts/auto_code_update_java.sh #!/bin/bash project=$1 tag=$2 dir=$(find `pwd` -name "*.war") IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do scp -rp $dir root@${n}:/data/${project}.war-$tag ssh root@$n "mkdir -p /code/$project-$tag && \ unzip -d /code/$project-$tag /data/${project}.war-$tag && \ rm -rf /app/tomcat/webapps/${project} && \ ln -s /code/$project-$tag /app/tomcat/webapps/${project} && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
项目构建
3. 立即构建
4. 查看效果
vim /server/scripts/auto_code_undo_java.sh #!/bin/bash project=$1 tag=$2 IP="10.0.0.7 10.0.0.8" for n in `echo $IP` do ssh root@$n "rm -rf /app/tomcat/webapps/${project} && \ ln -s /code/$project-$tag /app/tomcat/webapps/${project} && \ /app/tomcat/bin/shutdown.sh && \ /app/tomcat/bin/startup.sh" done
- 创建一个回滚job
添加文本参数:
选择版本进行构建:
构建结果:
项目思路:
-
创建项目仓库
-
解压文件并将源码推到码云指定仓库
-
编写自动部署脚本,并进行验证
-
Jenkins创建job添加git仓库地址,shell执行脚本
-
验证
#创建数据库,创建用户和权限 create database jeesns; grant all on jeesns.* to 'jeesns'@'10.0.0.%' identified by '123456'; #导入项目sql文件 cd /opt/jeesns/jeesns-web/database mysql -ujeesns -p123456 -h 10.0.0.5 jeesns <jeesns.sql #修改数据库连接地址 vim /opt/jeesns/jeesns-web/src/main/resources/jeesns.properties 地址:10.0.0.5 jdbc.user=jeesns jdbc.password=123456 #这里修改完了文件需要重新git仓库一下在上传到码云 #编译测试 mvn clean package
unzip -d /opt/jeesns.zip cd /opt/jeesns <--将需要上传的源码放在这里--> #创建码云仓库并将信息信息和地址写在目录 git config --global user.name "weijixiang" git config --global user.email "1354586675@qq.com" git init git add . git commit -m "first commit" git remote add origin git@gitee.com:weijixiang_god/jeesns.git git push -u origin master
添加git仓库地址:
编译项目时清空缓存编译:
执行脚本:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!