Jenkins
Jenkins简介
Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。
我们可以利用Jenkins来构建和部署我们的项目,它可以实现从代码仓库获取代码,将代码打包成可执行文件并通过远程的ssh工具执行脚本来运行我们的项目。

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
第一次登录需要输入管理员密码

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

选择安装插件方式

插件安装

创建管理员账号

实例配置和URL

Jenkins首页

自定义插件安装

安装Docker构建插件

安装角色管理插件

安装SSH插件

安装Email插件

安装Maven项目打包插件

全局工具配置
JDK

Maven

系统配置
SSH

角色权限管理
通过Jenkins的角色管理插件来管理Jenkins的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。
系统管理->全局安全配置界面

启用基于角色的权限管理

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


添加角色和权限关系

给用户分配角色

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的配置、日志以及数据目录映射到宿主机的指定文件夹下,防止重新创建容器后丢失数据

开启防火墙的指定端口
开启1080端口
1
| firewall-cmd --zone=public --add-port=1080/tcp --permanent
|
重启防火墙生效
只有重启防火墙,开发端口才生效
1
| systemctl restart firewalld
|
查看已经开发的端口
1
| firewall-cmd --list-ports
|

访问Gitlab

查看日志
初次重置root账号密码
1 2 3 4 5 6 7 8 9 10 11 12
| docker exec -it gitlab /bin/bash
gitlab-rails console -e production
user = User.where(id:1).first
user.password='xxx'
user.save!
exit
|
登录

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

创建组织

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


添加用户

编辑页面中修改用户密码


创建项目



将用户分配组织

本地推送
克隆url

IDEA绑定远程


输入用户名和密码

推送本地仓库

推送远端仓库

推送成功

项目部署
环境搭建
MySQL安装
拉取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镜像
启动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 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目录下

所有的脚本文件修改为可执行文件
1
| chmod +x ./demo-admin.sh
|
创建执行任务
新建任务

选择构建软件项目

配置项目
添加仓库

添加凭证

选择凭证

添加调用顶层maven目标的构建
用于把源码打包成Docker镜像并上传到Docker镜像仓库
先构建项目的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败
1
| clean install -pl demo-common
|


添加一个执行远程shell脚本的构建
用于在镜像打包完成后执行启动Docker容器的.sh脚本

执行任务

运行成功访问 Swagger API文档
