栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于CentOS8,从0开始搭建Jenkins+GitLab+Maven持续集成,自动构建SpringBoot项目案例

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于CentOS8,从0开始搭建Jenkins+GitLab+Maven持续集成,自动构建SpringBoot项目案例

一、环境准备

创建三台虚拟机

服务器名操作系统IP说明
GitLabCentOS 8192.168.225.129部署GitLab
JenkinsCentOS 8192.168.225.130部署Jenkins
ServerCentOS 8192.168.225.131部署Maven
二、GitLab服务器环境搭建 ①、安装基础依赖
#安装基础依赖
sudo yum install -y curl policycoreutils-python-utils openssh-server

#启动ssh服务&设置为开机启动
sudo systemctl enable sshd
sudo systemctl start sshd
②、安装Postfix

Postfix是一个邮件服务器,GitLab发送邮件需要用到

#安装postfix
sudo yum install -y postfix

#启动postfix并设置为开机启动
sudo systemctl enable postfix
sudo systemctl start postfix
③、开放ssh以及http服务(80端口)
#开放ssh、http服务
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent

#重载防火墙规则
sudo firewall-cmd --reload
④、安装GitLab

添加GitLab社区版Package

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

安装GitLab社区版

sudo yum install -y gitlab-ce

安装成功后shell窗口会打印出GitLab的Logo

⑤、配置GitLab站点Url

GitLab默认的配置文件路径是/etc/gitlab/gitlab.rb,我们需要做的就是将默认Url修改为当前机器的IP即可

external_url 'http://192.168.225.129'

⑥、刷新配置启动GitLab
#重新配置并启动
sudo gitlab-ctl reconfigure

时间会有点长,等待一下即可,当看见如下内容的时候,证明重启成功了

访问http://192.168.225.129/

初始管理员账号为root,密码需要手动查看一下

cat /etc/gitlab/initial_root_password 

将打印出来的密码复制,然后登录

⑦、GitLab常用配置 Ⅰ、邮件配置

配置邮箱可以让GitLab在发生相应事件的时候进行邮件通知,比如:找回密码、添加邮箱等,这里已QQ邮箱为例

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.qq.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xx@qq.com"
gitlab_rails['smtp_password'] = "xx"
# gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'xx@qq.com'
# gitlab_rails['smtp_pool'] = false

配置完毕需要刷新配置重启

sudo gitlab-ctl reconfigure
Ⅱ、禁用创建组权限

GitLab默认所有的注册用户都可以创建组。但对于团队来说,通常只会给Leader相关权限。虽然可以在用户管理界面取消权限,但毕竟不方便。我们可以通过配置GitLab默认禁用创建组权限。还是刚才的配置文件,找到gitlab_default_can_create_group取消注释,并将true改为false

gitlab_rails['gitlab_default_can_create_group'] = false

配置完毕需要刷新配置重启

sudo gitlab-ctl reconfigure
⑧、gitlab-ctl常用命令
命令说明
check-config检查在gitlab中是否有任何配置。在指定版本中删除的rb
deploy-page安装部署页面
diff-config将用户配置与包可用配置进行比较
remove-accounts删除所有用户和组
upgrade升级
service-list查看所有服务
once如果GitLab服务停止了就启动服务,如果已启动就不做任何操作
restart重启GitLab服务
start如果GitLab服务停止了就启动服务,如果已启动就重启服务
stop停止GitLab服务
status查看GitLab服务状态
reconfigurereconfigure重新配置GitLab并启动
⑨、备注

至此GitLab服务创建完毕,可以创建一个自己的账号,用于后续对Maven项目进行构建,然后切换第二台Jenkins机器

三、Jenkins服务器环境搭建 ①、JDK8安装

安装验证

sudo yum install -y java-1.8.0-openjdk*
java -version

复制JDK安装路径

#JDK8默认安装路径为/usr/lib/jvm
ls /usr/lib/jvm

修改环境变量配置文件

vim /etc/profile

最后一行追加如下内容

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64

PATH=$PATH:$JAVA_HOME/bin 

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

export JAVA_HOME CLASSPATH PATH

刷新配置

source /etc/profile
②、Nginx安装

由于Jenkins默认端口号不是80,所以这里部署Nginx是为了方便我们通过IP访问Jenkins,如果无此需求可忽略次操作

#安装
yum install nginx
#开机启动
sudo systemctl enable nginx
#启动
sudo systemctl start nginx
#开放80端口(nginx默认监听80端口)
firewall-cmd --add-port=80/tcp --permanent
#重载防火墙规则
firewall-cmd --reload

配置文件说明

1、全局配置文件:/etc/nginx/nginx.conf
2、默认配置文件:/etc/nginx/conf.d/default.conf

新增配置目录

#1、新增配置文件夹
sudo mkdir /etc/nginx/server
#2、修改默认配置(加载该文件夹下的配置)
sudo vim /etc/nginx/nginx.conf
#3、在http属性下的log_format后面追加
include /etc/nginx/server
@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

创建Controller

@Controller
public class HelloController {
    @RequestMapping("/")
    @ResponseBody
    String helloWorld() {
        return "Hello World";
    }
}

启动项目测试

⑦、GitLab创建项目

初始化本地项目

将本地代码提交到本地仓库

然后点击push

点击Define Remote

将远程仓库地址填入

最后点击push,查看远程仓库master分支

五、Jenkins任务创建 ①、新建任务

主页点击新建任务

②、配置源码管理

③、构建环境配置

配置项说明:

配置项说明
NameappserverSSH Server名称,根据之前配置选择即可
Source filestarget/*.jar需要传输的文件,支持通配符,编译文件默认都在项目根目录下的target目录中
Remove prefixtarget移除匹配到的文件路径的前缀,如果留空,会在远程服务器上创建对应的目录
Remote directoryhelloworld/远程服务器上的项目目录,该目录会被创建在Publish over SSH配置的远程根目录中(/webroot)
Exec command见下面文件传输到远程服务器后执行的命令

命令示例:

APP_NAME=HelloWorld.jar
cd /webroot/helloworld
mkdir -p logs

#找到包含AppName的进程
PROCESS=`ps -ef|grep $APP_NAME|grep -v grep  |awk '{ print $2}'`
#循环停用进程直到成功
while :
do
  kill -9 $PROCESS > /dev/null 2>&1
  if [ $? -ne 0 ];then
   break
  else
   continue
fi
done
echo 'Stop Successed'

#启动应用
nohup  /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/bin/java -jar $APP_NAME >>logs/start.log 2>>logs/startError.log &

#sleep等待15秒后,判断包含AppName的线程是否存在
sleep 15
if test $(pgrep -f $APP_NAME|wc -l) -eq 0
then
   echo "Start Failed"
else
   echo "Start Successed"
fi

最后保存,点击左边导航栏立即构建

你也可以通过控制台实时查看构建日志

构建成功后当前任务会变成绿色小勾

访问Maven应用服务器,成功

④、配置触发器

触发器的触发条件有很多,这里只配置了一个,即想要每次提交都让Jenkins帮我们自动构建,在配置这个触发器之前,我们还需要添加两个插件,一个是GitLab,另一个是Gitlab Hook

安装完成后,重新进入构建触发器页面,可以看到如图所示的选项

将http://192.168.225.130/project/HelloWorld链接复制下来,然后保存,然后进入Gitlab,使用管理员账号root登录,进入Setting找到Network,然后展开Outbound requests选项,将Allow requests to the local network from web hooks and services勾选上,然后保存更改

然后回到项目的Setting

将刚刚复制的URL粘贴到图示位置

最后Add webhook即可

最后回到Jenkins的全局配置,往下拉,找到Enable authentication for '/project' end-point并取消勾选,保存

最后我们测试一下提交代码

六、备注 ①、构建成功,但是目标文件夹中没有项目生成

一定要确定这段脚本中的APP_NAME一定要正确

APP_NAME=HelloWorld.jar
cd /webroot/helloworld
mkdir -p logs

#找到包含AppName的进程
PROCESS=`ps -ef|grep $APP_NAME|grep -v grep  |awk '{ print $2}'`
#循环停用进程直到成功
while :
do
  kill -9 $PROCESS > /dev/null 2>&1
  if [ $? -ne 0 ];then
   break
  else
   continue
fi
done
echo 'Stop Successed'

#启动应用
nohup  /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/bin/java -jar $APP_NAME >>logs/start.log 2>>logs/startError.log &

#sleep等待15秒后,判断包含AppName的线程是否存在
sleep 15
if test $(pgrep -f $APP_NAME|wc -l) -eq 0
then
   echo "Start Failed"
else
   echo "Start Successed"
fi

还有启动应用的时候jdk路径一定也要对应上

②、 Exception when publishing, exception message [Permission denied]

这个问题就是手动在目标项目根目录/webroot下面手动新建了一个HelloWorld文件夹,而这个文件夹还是用的root用户创建,导致使用Jenkins配置的用户没有操作权限导致的,解决方案就是把这个文件夹删了,项目部署的时候会自动帮我们创建,不用担心这个

  • 参考1
  • 参考2
  • 参考3
  • 参考4
  • 参考5
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号