当前位置:   article > 正文

docker+jenkins+gitlab 自动化部署_jenkins +docker

jenkins +docker

docker+jenkins+gitlab 自动化部署

一、什么是Jenkins?

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成( CI/CD)。

二、安装前说明

1、本次安装Jenkins和gitlab是基于docker,
2、需要安装docker环境、maven环境和jdk8。

三、Jenkins安装,配置也是基于docker

1、docker search jenkins
  • 1
2、选择需要的Jenkins的版本
      docker pull jenkins/jenkins
  • 1
  • 2

3、创建jenkins的挂载目录并授权
docker的实现实际上是创造了一个独立的容器环境,Jenkins在这个容器内运行,所以配置Jenkins时,需进入容器内,
虽然可以使用docker exec -it 【容器id】bash,命令进入容器内进行配置,但很多容器内不能用vi和vim命令。
如果我们在启动镜像时指定挂载目录,那麽在服务器本机与容器之间可以创建一个映射。
所以我们在服务器上先创建一个jenkins工作目录, /var/jenkins_mount,赋予相应权限,稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。

mkdir -p /var/jenkins_mount
chmod 777 /var/jenkins_mount
  • 1
  • 2

4、创建并启动Jenkins容器

docker run \
--privileged=true \
--restart=on-failure \
-itd \
-e JENKINS_OPTS='--prefix=/jenkins' \
-e TZ='Asia/Shanghai' \
-e JENKINS_ARGS='--prefix=/jenkins' \
-d -p 10240:8080 \
-p 50000:50000 \
-v /var/jenkins_mount:/var/jenkins_home \
-v /home/apache-maven-3.8.6:/usr/local/maven \
-v /etc/localtime:/etc/localtime \
--restart=always \
--name=jenkins \
jenkins/jenkins
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

下面是直定对应参数的意义:

-d 后台运行镜像

-p 10240:8080 意义: 将镜像的8080端口映射到服务器的10240端口。

-p 10241:50000 意义:将镜像的50000端口映射到服务器的10241端口

-v /var/jenkins_mount:/var/jenkins_mount 
意义: /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /var/jenkins_mount目录

-v /etc/localtime:/etc/localtime 意义:让容器使用和服务器同样的时间设置。
-v /root/apache-maven-3.8.4:/usr/local/maven 
意义:挂载本地maven,前面是服务器上的,后面是挂载到容器上的目录
–name myjenkins 意义:给容器起一个别名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

问题记录:
1、我在docker run jenkins时未设置开机自动动,所以在第二次开机要重启jenkins

docker start 【容器名或者容器id】
  • 1

2、新增设置开机自启动

   docker update  --restart=always 【容器名或容器id】
或者
   docker container update --restart=容器名或容器id】
  • 1
  • 2
  • 3

然后使用docker在后台启动jenkins镜像,注意maven一定要挂载,不然后面在容器里找不到maven。如何挂载请看上面注释,路径也要注意,我安装到了/home/apache-maven-3.8.4,根据自己的安装修改路径。
这里我没有挂载jdk,是因为centos自带jdk,所以在容器中使用自带的jdk。
3、可以通过docker ps 看看jenkins是否启动,如果未启动使用docker ps -a 查询所有的容器,找到对应jenkins的容器id,使用docker rm [容器ID]删除,再重新检查命令是否正确、端口等等问题,并启动镜像创建容器。
在这里插入图片描述
4、可以通过docker logs myjenkins命令查看日志,可以看到Jenkins就是一个Spring项目。
在这里插入图片描述
5、进入容器,检查一下maven是否挂载成功,进入容器的命令是docker exec -it 【容器ID】 bash,进入到我们刚才指定的Maven目录,也就是/usr/local/maven,可以看到确实有maven。
在这里插入图片描述

问题记录:

1、jenkins启动时出现如下问题:因为镜像源的问题超时,

docker logs -f jenkins         #查看日志
  • 1

在这里插入图片描述
2、进入Jenkins容器修改镜像源:

docker exec -it jenkins bash
  • 1

在这里插入图片描述
这里发现进入容器用户改变了不是root,切换root用户后,输入密码不对,这里我没明白root的密码为什么不对,所以在进入容器时设置了用户参数:

docker exec -it -u root 容器id或容器名称
  • 1

在这里插入图片描述
3、进入容器后没有vi和vim命令:
在这里插入图片描述
在网上查找了尝试了很多安装方式:

# 正常步骤:网上的很多这种方式都成功了,我的还是报错这里忘记截图了
1:apt-get update
2: apt-get install -y vim
  • 1
  • 2
  • 3

然后更换镜像源:

# Aliyun Apt Source 阿里云镜像源
echo "deb http://mirrors.aliyun.com/debian/ bullseye main contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ bullseye main contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ bullseye-backports main contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ bullseye-proposed-updates main contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-proposed-updates main contrib" >> /etc/apt/sources.list
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3、执行:apt-get update
4、如果不行则执行:apt-get upgrade
5、执行:apt-get install -y vim
6、apt-get install aptitude
7、成功以后使用: sudo aptitude install vim
这里的顺序可能写的有点问题,最后是安装成功了。
在这里插入图片描述

替换下载源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
  • 1

这里还有一个问题:有的Jenkins镜像不用更换这里的下载源,也是可以的,我的这里遇到了这个问题

8、修改完后重启jenkins容器,因为我这里是用docker安装的,

所以用命令:docker restart jenkins
  • 1

如果你不是用docker安装

用命令:systemctl restart jenkins
  • 1

9、Docker ps 查看Jenkins服务正常。

四、配置Jenkins服务

1、启动好镜像我们就可以进行配置了,Jenkins是一个web服务,所以我们直接使用web端口访问即可。
由于我上面docker配置的是10240端口,直接访问10240端口即可,如果是云服务器,记得打开安全组的10240端口。
在这里插入图片描述
这里显示的是jenkins_home路径,前面我设定的目录是jenkins_mounts,所以我的密码放置目录是/var/jenkins_mount,在initialAdminPassword文件下可以看到密码。
2、使用“安装推荐的插件”,并创建账户.。
在这里插入图片描述
在这里插入图片描述
3、将信息输入对应输入框内,点击保存并完成,进入如下图所示
在这里插入图片描述
4、至此Jenkins搭建完成
在这里插入图片描述
5、点击保存,进入Jenkins。
在这里插入图片描述
6、设置Jenkins时区为北京时间,点击系统管理——脚本命令行
在这里插入图片描述
输入脚本并运行:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
  • 1

如图显示Result表示成功:
在这里插入图片描述
7、安装自动化构建和部署所需的插件
在这里插入图片描述
8、安装Maven插件:点击可选插件——过滤MavenIntegration插件——勾选Maven Integration和Pipeline Maven Integration——点击直接安装,
我这里已经安装好了,如图:
在这里插入图片描述
9、安装Gitlab插件:点击可选插件——过滤Gitlab插件——勾选Gitlab和Gitlab hook——点击直接安装
gitlab的插件我这里也已经安装好了
在这里插入图片描述
10、安装SSH插件和Publish Over SSH插件:点击可选插件——过滤SSH插件——勾选SSH和Publish Over SSH——点击直接安装

安装Publish Over SSH插件的原因:因为本方式是使用docker启动jenkin服务,所以在jenkins后续执行构建任务时候,需要在build成功后,将服务的jar包[以spring boot]服务为例,需要将jar包拷贝到Dockerfile所在服务器的指定目录,进行微服务的启动;所以,此处需要配置SSH服务器的连接,意思就是在jenkins的任务结束后,去执行指定的服务器上的shell命令,做spring boot或cloud服务的镜像的构建,容器的运行
11\、在这里插入图片描述
插件全部安装完成后,重启Jenkins。
11、Jenkins全局工具配置
在这里插入图片描述

# Jenkins JDK默认位置
/opt/java/openjdk

# 也可以进入容器查看JDK位置
docker exec -it  jenkins /bin/bash
which java
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
配置结果如下,若没有安装Maven可以到官网下载

# 根据需要下载对应版本
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.8.4-bin.tar.gz
# 解压
tar -vxf apache-maven-3.8.4-bin.tar.gz
# 修改文件名
mv apache-maven-3.8.4 maven
# 将解压文件复制到容器内(jenkins只需要指定maven目录,不需要配置环境变量)
docker cp /home/docker/jenkins/maven docker-jenkins:/opt/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
12、Jenkins添加服务器:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
13、Jenkins添加凭证这里连接的是GitHub,因为我这里搭建的是gitlab,所以就没配置,还是记录一下这里的配置过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Github主页头像 ⇢ setting Settings ⇢ Developer Settings ⇢ Personal access tokens (classic),因为我现在连接不上GitHub,所以这里也没截图。

五、Jenkins添加项目

1、我这里是下载了一套别人文档中的小霸王小游戏的代码
小霸王游戏项目下载链接:https://pan.baidu.com/s/1eDZoMkwq87gnmQ5Q5OyKJA?pwd=3vhb
在这里插入图片描述
和前面配置GitHub一样,我这里没配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
现在保存,在Jenkins里面点击立即构建
在这里插入图片描述
在这里插入图片描述
接下来访问gitlab,进入到项目里面
在这里插入图片描述
在这里插入图片描述
点击高级,拉下来找到Generate并点击,生成一串Secret Token:54c55a6fa30f0cd64646ce68f3f48c9c
在这里插入图片描述
点击增加web钩子,如图成功添加了web钩子
在这里插入图片描述
测试push事件触发自动化构建和部署在这里插入图片描述在这里插入图片描述
前往gitlab,刚我们新增的webhook,点击test下拉选择push events,出现HTTP 200表示成功了。
我这里是简单测试下载部署了一个前端小霸王小游戏,这里再安装一个nginx,配置一下前端访问就可以了。

后记:

Jenkins JDK默认位置

/opt/java/openjdk
  • 1

也可以进入容器查看JDK位置

docker exec -it docker-jenkins /bin/bash
which java
  • 1
  • 2

在这里插入图片描述

命令总结:

#查看某个镜像版本信息
docker search 镜像
#拉取镜像
docker pull 镜像
#列出已有镜像
docker images
#导出镜像
docker save REPOSITORY:TAG/镜像ID > /镜像路径/镜像.tar.gz
举例:docker save centos7:latest > /root/centos7.tar.gz
#导入镜像
docker load < /镜像路径/镜像.tar.gz
举例:docker load < /root/centos7.tar.gz
#移除镜像
docker rmi REPOSITORY:TAG/镜像ID
#运行容器方法一(守护进程)
docker run -d --name 容器取名 -p 宿主机端口:容器端口 --privileged=true REPOSITORY:TAG/镜像ID
#运行容器方法二(交互)
docker run -it --name 容器取名 -p 宿主机端口:容器端口 --privileged=true REPOSITORY:TAG/镜像ID /bin/bash
#查看容器正在启动情况
docker ps
#查看容器所有启动情况
docker ps -a
#进入容器
docker exec -it 容器名 /bin/bash
#退出容器
exit
#复制文件到容器中
docker cp /文件路径/文件 容器名:/存储路径
举例:docker cp /usr/local/setting.xml jenkins:/usr/local/apache-maven-3.3.9/conf
#启动容器
docker start 容器名/容器ID
#暂停容器
docker stop 容器名/容器ID
#移除容器
docker rm 容器名/容器ID
#一键启动、移除、暂停所有容器
docker start  `docker ps -qa`
docker rm `docker ps -qa`
docker stop `docker ps -qa`
#批量删除tag为"<none>"镜像
docker rmi $(docker images | egrep '<none>' | awk '{print $3}')
#挂载 /opt/etc 前需要将目录下的文件复制到宿主机下,将 /opt/emqx/etc 目录下的文件复制到宿主机下
docker run --rm emqx/emqx:5.2.1 sh -c 'cd /opt/emqx && tar -c etc' | tar -C $PWD -x
#执行容器内部命令,检查nginx配置文件
docker exec -it nginx:latest nginx -t

#查询容器日志
docker logs -f -t --tail=500 容器名
#查看运行容器的挂载详细信息(-A:后面指定显示行数)
docker inspect 容器名 |grep Mounts -A 20
#dokcer开机自启某个容器
docker update --restart=always 容器名
#前提Docker服务开机自启
sudo systemctl enable docker.service
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
#创建文件
mkdir 文件名
#复制粘切文件
mv 原文件目录 目标文件目标 
#删除文件
rm 删除文件目录
#删除文件夹
rm -rf 删除文件夹目录

#查看防火墙状态
systemctl status firewalld
#暂停防火墙状态
systemctl stop firewalld
#启动防火墙状态
systemctl start firewalld
#永久关闭防火墙(关机重启才会生效)
systemctl disable firewalld
#开放端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
firewall-cmd --reload
#移除端口号
firewall-cmd --zone=public --remove-port=端口号/tcp --permanen
#查看所有开放端口列表
firewall-cmd --zone=public --list-ports

#查看某应用进程
ps -ef | grep 应用名
#查看某端口
netstat -lnp|grep 端口名

#查找所有yum包
yum list all
#根据关键字查询
yum list all|grep 关键字
#安装基本依赖,wget 网页下载 lrzsz上传下载 bash-completion tab补全 vim 编辑器
yum install wget lrzsz bash-completion vim -y

#设置服务开机启动
chkconfig 服务名 on 

#查找文件 /:从根目录开始找
find / -name 文件名   

#安装zip解压
yum install unzip -y
#解压zip包
unzip 包名.zip

#查看内存占用情况
free -g
#查看硬盘内存
df -h
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号