Jenkins

Jenkins简介

Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。

我们可以利用Jenkins来构建和部署我们的项目,它可以实现从代码仓库获取代码,将代码打包成可执行文件并通过远程的ssh工具执行脚本来运行我们的项目。

image-20220804133922012

Jenkins的安装及配置

Docker环境下的安装

Docker拉取Jenkins镜像

1
docker pull jenkins/jenkins

创建并运行Jenkins容器

1
2
3
4
5
docker run --name jenkins \
-p 8090:8080 -p 50000:5000 \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins

Jenkins配置

访问地址登录

访问:http://ip:8090/ 登录Jenkins

第一次登录需要输入管理员密码

image-20220731210839012

从容器启动日志中获取管理密码

1
docker logs jenkins

image-20220731211050415

选择安装插件方式

image-20220731211149198

插件安装

image-20220731211433814

创建管理员账号

image-20220731234318802

实例配置和URL

image-20220731234553887

Jenkins首页

image-20220731234720277

自定义插件安装

image-20220802164924015

安装Docker构建插件

image-20220802223252918

安装角色管理插件

image-20220802223530182

安装SSH插件

image-20220802223821538

安装Email插件

image-20220802224256544

安装Maven项目打包插件

image-20220806214702640

全局工具配置

JDK

image-20220803093615629

Maven

image-20220803093953255

系统配置

SSH

image-20220802225402573

角色权限管理

通过Jenkins的角色管理插件来管理Jenkins的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。

系统管理->全局安全配置界面

image-20220804131700882

启用基于角色的权限管理

image-20220804132005082

系统管理->Manage and Assign Roles界面

image-20220804132044412

image-20220804132151926

添加角色和权限关系

image-20220804132619633

给用户分配角色

image-20220804132806012

Gitlab安装

GitLab 是一款使用MIT许可证的基于网络的Git仓库管理项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。

GitLab服务端搭建

拉取Gitlab镜像

1
docker pull gitlab/gitlab-ce

创建并运行Gitlab容器

1
2
3
4
5
6
7
8
docker run --detach \
--publish 10443:443 --publish 1080:80 --publish 1022:22 \
--name gitlab \
--restart always \
--volume /mydata/gitlab/config:/etc/gitlab \
--volume /mydata/gitlab/logs:/var/log/gitlab \
--volume /mydata/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

将Gitlab的Http服务运行在宿主机的1080端口上

将Gitlab的配置、日志以及数据目录映射到宿主机的指定文件夹下,防止重新创建容器后丢失数据

image-20220804173347200

开启防火墙的指定端口

开启1080端口
1
firewall-cmd --zone=public --add-port=1080/tcp --permanent 
重启防火墙生效

只有重启防火墙,开发端口才生效

1
systemctl restart firewalld
查看已经开发的端口
1
firewall-cmd --list-ports

image-20220804222130047

访问Gitlab

访问地址:http://xx.xxx.xxx.xxx:1080/

image-20220804223454356

查看日志
1
docker logs gitlab -f
初次重置root账号密码
1
2
3
4
5
6
7
8
9
10
11
12
# 进入容器内部
docker exec -it gitlab /bin/bash
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户-超级管理员
user = User.where(id:1).first
# 修改密码
user.password='xxx'
# 保存密码
user.save!
# 退出
exit
登录

image-20220804225950579

选择创建项目、创建组织、创建账号

image-20220806195727566

创建组织

image-20220806195930430

创建用户
进入添加用户界面

image-20220806200319437

image-20220806200424138

添加用户

image-20220806200739851

编辑页面中修改用户密码
image-20220806200950920

image-20220806201032717

创建项目

image-20220806201200515

image-20220806201145180

image-20220806201253761

将用户分配组织

image-20220806201620424

本地推送
克隆url

image-20220806202639878

IDEA绑定远程

image-20220806202939887

image-20220806202955038

输入用户名和密码

image-20220806202920027

推送本地仓库

image-20220806203101897

推送远端仓库

image-20220806203815604

推送成功

image-20220806204147005

项目部署

环境搭建

MySQL安装

拉取MySQL镜像
1
docker pull mysql
启动MySQL服务
1
2
3
4
5
6
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/log:/logs \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
进入运行MySQL的docker容器
1
docker exec -it mysql /bin/bash
使用MySQL命令打开客户端
1
mysql -uroot -proot --default-character-set=utf8
创建一个reader:123456帐号并修改权限
1
2
CREATE USER 'reader'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* to 'reader'@'%';

Redis安装

拉取Redis镜像
1
docker pull redis
启动Redis服务
1
2
3
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis redis-server --appendonly yes
进入运行Redis的docker容器
1
docker exec -it redis redis-cli

Nginx安装

拉取nginx镜像
1
docker pull nginx
运行容器拷贝配置文件
1
2
3
4
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx
将容器内的配置文件拷贝到指定目录
1
docker container cp nginx:/etc/nginx /mydata/nginx/
修改文件名称
1
2
cd /mydata/nginx
mv nginx conf
终止并删除容器
1
2
docker stop nginx
docker rm nginx
启动Nginx服务
1
2
3
4
5
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx

准备执行脚本

脚本文件存放在项目的/document/sh目录下

修改脚本文件的换行符格式为LF

上传脚本文件至指定目录

将所有的脚本文件上传至/mydata/sh目录下

image-20220807022412347

所有的脚本文件修改为可执行文件

1
chmod +x ./demo-admin.sh

创建执行任务

新建任务

image-20220806230804597

选择构建软件项目

image-20220806230836921

配置项目

添加仓库

image-20220806231912987

添加凭证

image-20220806232043170

选择凭证

image-20220806232110904

添加调用顶层maven目标的构建

用于把源码打包成Docker镜像并上传到Docker镜像仓库

先构建项目的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败

1
clean install -pl demo-common

image-20220807024029026

image-20220807024157644

添加一个执行远程shell脚本的构建

用于在镜像打包完成后执行启动Docker容器的.sh脚本

image-20220807024249753

执行任务

image-20220807224609871

运行成功访问 Swagger API文档

image-20220807224823488