创建三台虚拟机
| 服务器名 | 操作系统 | IP | 说明 |
|---|---|---|---|
| GitLab | CentOS 8 | 192.168.225.129 | 部署GitLab |
| Jenkins | CentOS 8 | 192.168.225.130 | 部署Jenkins |
| Server | CentOS 8 | 192.168.225.131 | 部署Maven |
#安装基础依赖 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
⑤、配置GitLab站点Url安装成功后shell窗口会打印出GitLab的Logo
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'] = truegitlab_rails['smtp_address'] = "smtp.example.qq.server"gitlab_rails['smtp_port'] = 465gitlab_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'] = truegitlab_rails['smtp_tls'] = truegitlab_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服务状态 |
| reconfigure | reconfigure重新配置GitLab并启动 |
三、Jenkins服务器环境搭建 ①、JDK8安装至此GitLab服务创建完毕,可以创建一个自己的账号,用于后续对Maven项目进行构建,然后切换第二台Jenkins机器
安装验证
sudo yum install -y java-1.8.0-openjdk*java -version
复制JDK安装路径
#JDK8默认安装路径为/usr/lib/jvmls /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_64PATH=$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.conf2、默认配置文件:/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
将远程仓库地址填入
五、Jenkins任务创建 ①、新建任务最后点击push,查看远程仓库master分支
②、配置源码管理 ③、构建环境配置主页点击新建任务
配置项说明:
| 配置项 | 值 | 说明 |
|---|---|---|
| Name | appserver | SSH Server名称,根据之前配置选择即可 |
| Source files | target/*.jar | 需要传输的文件,支持通配符,编译文件默认都在项目根目录下的target目录中 |
| Remove prefix | target | 移除匹配到的文件路径的前缀,如果留空,会在远程服务器上创建对应的目录 |
| Remote directory | helloworld/ | 远程服务器上的项目目录,该目录会被创建在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
②、 Exception when publishing, exception message [Permission denied]还有启动应用的时候jdk路径一定也要对应上
这个问题就是手动在目标项目根目录/webroot下面手动新建了一个HelloWorld文件夹,而这个文件夹还是用的root用户创建,导致使用Jenkins配置的用户没有操作权限导致的,解决方案就是把这个文件夹删了,项目部署的时候会自动帮我们创建,不用担心这个
- 参考1
- 参考2
- 参考3
- 参考4
- 参考5



