jenkins+docker+maven自动化部署

一。
pull jenkins镜像,官方建议
在这里插入图片描述
二。运行jenkins容器(容器操作参考https://www.jenkins.io/zh/doc/book/installing/#%E5%9C%A8docker%E4%B8%AD%E4%B8%8B%E8%BD%BD%E5%B9%B6%E8%BF%90%E8%A1%8Cjenkins)。
docker run -d -p 8080:8080 jenkins镜像名
jenkins+docker+maven自动化部署_第1张图片
容器运行时建议将jenkins挂载本地目录到容器中作为工作目录:
docker run -d -p 8080:8080 -v /root/jenkins /var/jenkins_home 容器名称
通过上面方法启动的容器,只要定时打包备份/root/jenkins目录就可以了。升级Jenkins版本时,直接使用该目录,使用新镜像重新启动容器就可以了。

三。下载ruoyi开放源码
https://gitee.com/y_project/RuoYi
电脑端登录gitee,下载到本地
jenkins+docker+maven自动化部署_第2张图片
下载git,并通过git上传,具体操作可以查看另一篇文章
gitee上传代码

四。访问jenkins
jenkins+docker+maven自动化部署_第3张图片
进入jenkins容器,找到/var/jenkins_home上边的目录就可以查看密码
选择安装推荐的插件
jenkins+docker+maven自动化部署_第4张图片
可能会有插件安装报错,先跳过
jenkins+docker+maven自动化部署_第5张图片
开始使用jenkins,选择系统管理
jenkins+docker+maven自动化部署_第6张图片
找到插件管理
在这里插入图片描述
下载以下几种插件:
NodeJS Plugin
Maven Integration plugin
Publish Over SSH
Subversion Plug-in
输入插件名称搜索,插件勾选后点击“Install without restart”。
jenkins+docker+maven自动化部署_第7张图片
全局工具配置
jenkins+docker+maven自动化部署_第8张图片
新增jdk配置:复制java文件至jenkins容器中
jenkins+docker+maven自动化部署_第9张图片

maven配置
maven官网下载
jenkins+docker+maven自动化部署_第10张图片
下载
jenkins+docker+maven自动化部署_第11张图片
下载后解压缩:tar -zxvf apche-maven … 再上传至容器中
配置jenkins的maven
jenkins+docker+maven自动化部署_第12张图片

之后保存。
jenkins+docker+maven自动化部署_第13张图片
配置maven本地仓库
找到maven的conf目录,修改setting.xml文件
#进入目录并创建本地仓库
cd apache-maven && mkdir repo
#修改Maven仓库位置为
/var/jenkins_home/apache-maven/repo
原配置文件
jenkins+docker+maven自动化部署_第14张图片
修改后:不知道apache-maven中的特殊符号有没有影响
jenkins+docker+maven自动化部署_第15张图片
构建maven项目,报错,jenkins服务器没有安装git客户端
jenkins+docker+maven自动化部署_第16张图片
下载linux版本git安装至jenkins容器,依旧报错
在jenkins中添加credentials,点击下方的”添加“,配置gitee的用户名和密码和id

jenkins+docker+maven自动化部署_第17张图片
如果用户名和密码填错了
找到系统管理–manage credentials修改就可以了
jenkins+docker+maven自动化部署_第18张图片
jenkins+docker+maven自动化部署_第19张图片
构建触发器,可根据需要自定义
Poll SCM
按照设定的时间规则,先比较一次源代码是否发生变更,如果发生变更,那么就按设定的时间规则(例如:每天晚上10:00)build。否则,不进行build,通常采用这种方式。
jenkins+docker+maven自动化部署_第20张图片
构建环境
在构建运行后通过SSH发送文件或执行命令
jenkins+docker+maven自动化部署_第21张图片
可以先保存再进行下一步
回到首页–系统管理–下拉找到publish over ssh
jenkins+docker+maven自动化部署_第22张图片
进入jenkins容器,输入:ssh-keygen 敲三次enter
Passphrase: 如果生成秘钥的时候输入了密码,就在这里输入,否则留空

jenkins+docker+maven自动化部署_第23张图片
把生成的id_rsa.pub(公钥)内容复制或者追加到要远程的机器的~/.ssh/authorized_keys(不存在可以自己创建),.ssh文件夹的权限为600,authorized_keys文件的权限为700;.ssh目录可以通过ls -a 查看到
在这里插入图片描述
追加命令:cat 源文件>> 目的文件
cat id_rsa.pub>>authorized_keys 这个命令可以追加多个公钥到authorized_keys 文件里。ssh自己会去读取这里面的每个服务器公钥
在这里插入图片描述

把id_rsa(私钥)的内容填写在Jenkins SSH Key -> Key 里面
或者指定Path to key(jenkins机器私钥的文件路径)也可以
jenkins+docker+maven自动化部署_第24张图片
填写名称、主机ip、ssh用户名、远程的目录(最好写/,后面就可以用绝对路径了)
jenkins+docker+maven自动化部署_第25张图片
不要勾选【Use password authentication, or use a different key】使用密码登录

jenkins+docker+maven自动化部署_第26张图片
点击【Test Configuration】,测试连接,显示Success即可;
我的点测师连接后报错:
jenkins+docker+maven自动化部署_第27张图片
测试是否可以通过ssh连接:ssh root@IP地址
jenkins+docker+maven自动化部署_第28张图片
可以连接,不过要输入密码才能连接
应该jenkins版本与ssh版本生成的密钥不兼容
这个时候可以在远程服务器通过 journalctl --unit=sshd查看日志
在jenkins登录后首页的右下角,可以看到当前的版本
生成之前版本的密钥:
ssh-keygen -m PEM -t rsa -b 4096
-m 参数指定密钥的格式,PEM是rsa之前使用的旧格式
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。
重新设置公钥和密钥
测试连接后换了一种错误:

jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [k8s]. Message [Auth fail]]
jenkins.plugins.publish_over。BapPublisherException:无法连接和初始化SSH连接。消息:[无法连接配置[k8s]的会话。消息[验证失败]]

jenkins+docker+maven自动化部署_第29张图片
查看ssh日志:journalctl --unit=sshd
在这里插入图片描述
依旧不行,上边这种方法是jenkins容器和服务器在同一台3服务器,不知道是不是这个原因。换成windows服务器和linux虚拟机。

jenkins安装在windos服务器

1
配置jak环境1.8
2
配置maven环境:
下载maven压缩包
将maven压缩包解压到指定目录
配置MAVE_HOME环境变量
在PATH环境变量后面加上%MAVE_HOME%\bin
配置maven本地仓库
找到maven安装包—conf—setings.xml localrepository是本地仓库地址
jenkins+docker+maven自动化部署_第30张图片

3
安装tomcat运行环境。
jenkins+docker+maven自动化部署_第31张图片
4
下载jenkins war 包
jenkins+docker+maven自动化部署_第32张图片
5
解压缩后,将jenkins.war包放置在tomcat的wepapps目录下
启动tomcat, startup.bat
访问jenkins :localhost:8080/jenkins
6
安装以下几种插件,使用jenkins自带的插件搜索通过名称搜素即可
NodeJS Plugin
Maven Integration plugin
Publish Over SSH
Subversion Plug-in
输入插件名称搜索,插件勾选后点击“Install without restart”。
jenkins+docker+maven自动化部署_第33张图片
7
本地电脑要配置jdk和maven环境
首页–manage jenkins — 配置jdk和maven
jenkins+docker+maven自动化部署_第34张图片
jenkins+docker+maven自动化部署_第35张图片
jenkins+docker+maven自动化部署_第36张图片
点保存
8
首页–manage jenkins --Configure System
jenkins+docker+maven自动化部署_第37张图片
找到Publish over SSH点新增。remote derectory建议写成根目录/
jenkins+docker+maven自动化部署_第38张图片
remote directory :配置要远程的服务器地址(可随意)
勾选
输入password输入服务器密码,和上图的username相匹配。其余默认
jenkins+docker+maven自动化部署_第39张图片
点test configuration 成功。最后保存

jenkins+docker+maven自动化部署_第40张图片
9
构建docker镜像
mkdir /usr/local/jenkins/jenkinscontain
cd /usr/local/jenkins/jenkinscontain
touch Dockerfile

vim Dockerfile
jenkins+docker+maven自动化部署_第41张图片
每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更

Supervisor 是用 Python 实现的一款Linux/Unix系统下的一个进程管理工具,不支持Windows系统,它可以很容易监听、启动、停止、重启一个或多个进程,而且它管理的程序是非 daemon 程序;如果用Supervisor管理进程,当进程被杀死后,Supervisor监听到进程死后,会自动将被杀死的进程自动启动,进程就可以自动恢复了,不需要自己写shell脚本来控制。简单来说,就是用来管理进程的。
epel-release 也就是 EPEL源,安装完成之后你就可以直接使用yum来安装额外的软件包,有部分软件,是需要安装这个包之后,才能更方便快捷地进行安装的。如果已安装过,则可以跳过,否则,如果直接安装Supervisor,则可能会出现错误提示。验证是否成功supervisord --version

sed -i : 在 XX行的行前增加内容
sed -a: 在XX行的行后增加内容

workdir:用来指定当前工作目录(或者称为当前目录)使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。指定了WORKDIR后,容器启动时执行的命令会在该目录下执行
/tail 地址是在容器中的地址

Dockerfile中的ENV指令用以定义镜像的环境变量

yum clean all :是通过yum安装的rpm和header都缓存在系统硬盘中,占用空间,可以清除。yum clean header 清除header包文件
yum clean rpm 清除rpm安装包
yum clean all 清除所有
如果执行yum clean all 报错,执行yum repolist all,结果为0。执行yum list正常。就是/etc/yum.repos.d/*.repo 的原因,接着执行yum makecache 然后再执行yum update。

supervisord 作用:启动supervisor程序自身,启动supervisor管理的子进程

10
创建supervisord配置文件
vim supervisord.conf
jenkins+docker+maven自动化部署_第42张图片
nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
在这里插入图片描述
11
构建镜像(注意后边有一个点)
docker build -t tale:latest .
构建完成可以docker image list 查看tale 镜像。

为镜像打上tag
docker tag tale:latest 服务器ip:5000/tale:latest

要创建一个目录/data下面一个tale目录,因为后面配置Jenkins的时候会把项目传到/data目录下,然后把/data/tale这个目录映射到docker容器里面的工作目录下
mkdir -p /data/tale
在这里插入图片描述

12
构建一个maven项目
jenkins+docker+maven自动化部署_第43张图片
配置git项目源码报错
Failed to connect to repository : Error performing git command: git.exe ls-remote -h https://gitee.com/on-the-way-to-study-xx/ruoyi.git HEAD

原因:找不到git.exe
jenkins+docker+maven自动化部署_第44张图片
只须要拷贝一份本地的git.exe的绝对路径到 Path to Git executable 下,就能够了
jenkins+docker+maven自动化部署_第45张图片
在晚上的八点运行,如果没有变动则不运行
jenkins+docker+maven自动化部署_第46张图片
jenkins+docker+maven自动化部署_第47张图片
remote directory 在前面配置的ssh server中配置的基础目录上生成放资源的目录
jenkins+docker+maven自动化部署_第48张图片

构建环境选择 Send files or execute commands over SSH after the build runs
5.1 SSH Server Name选择3.2步骤配置好的选项
5.2 Source files 是需要上传的源文件路径,注意此处需要填写相对路径,即路径的起始是以工程目录根目录开始的
5.3 Remove prefix是需要去除的前缀,这里把target去掉
5.4 Remote directory是上传服务器中的文件夹名称这里要上传到的文件夹是tale
5.5 这几个配置项配置完成之后就是将工程目录下target文件夹下所有jar包上传到远程服务器指定目录的tale文件夹当中去

Exec command 上传完成之后执行的命令,以下面为准
jenkins+docker+maven自动化部署_第49张图片
修改jenkins默认的jar包构建路径(每个jenkins版本可能都不一样)
jenkins+docker+maven自动化部署_第50张图片

点击项目
jenkins+docker+maven自动化部署_第51张图片
开始构建,第一次构建时间可能久,build history 可以看到进程
jenkins+docker+maven自动化部署_第52张图片
13
可以将build的jar包放在本地测试运行一下,也可以忽略这步。
将代码包的sql文件(ry_20210924.sql,quartz.sql)导入root用户,database选择新增的ry。
jenkins+docker+maven自动化部署_第53张图片
启动若依程序包,就可以访问了
jenkins+docker+maven自动化部署_第54张图片
说明程序包没问题。
14
检查supervisor的状态
查看进程是否启动成功
pgrep supervisord
15
ruoyi-admin.jar包传输不成功的原因:
Transfer Set Source files 这里用的是相对工作区的路径,比如你这个jenkins的工作目录为/xcdata/docker-jenkins/jenkins/jenkins_home/workspace/tj,那这的目录只能是相对于这个目录下的(不要填绝对路径,要写相对路径)
jar包所在全路径为C:\Users\86137.jenkins\workspace\ruoyi1028\ruoyi-admin\target\ruoyi-admin.jar,
其中C:\Users\86137.jenkins为主目录,\workspace\ruoyi1028为所建视图位置,
\ruoyi-admin\target\ruoyi-admin.jar为source file
查看jenkins的工作目录:
jenkins+docker+maven自动化部署_第55张图片
把自定义工作空间取消。
查看jenkins的构建历史–控制台输出–查看jenkins build的jar包存放地址
C:\Users\86137.jenkins\workspace\ruoyi1028\ruoyi-admin\target\ruoyi-admin.jar
jenkins+docker+maven自动化部署_第56张图片

修改成source file地址
jenkins+docker+maven自动化部署_第57张图片
测试用:
C:\Users\86137.jenkins\workspace\ruoyi1028\ruoyi-admin\target\ruoyi-admin.jar
\workspace\ruoyi1028\ruoyi-admin\target\ruoyi-admin.jar
/target/ruoyi-admin.jar
/target/.jar
/target/*.jar
正常配置:
jenkins+docker+maven自动化部署_第58张图片
可以在远程目标服务器看到传输的文件。

16
在jar包当前目录下创建可执行文件startry.sh
意思:先kill掉运行的jar包进程,再重新启动

ruoyi.log指将内容保存
0 指标准输入(一般指键盘)
1 指标准输出(一般指显示输出的信息,用户终端控制台)
2 指标准错误(错误信息输出)
&1 指继续输出到标准输出(让系统识别)最后一个&是后台运行

jenkins+docker+maven自动化部署_第59张图片
构建程序前需要先在远程服务器启动一下jar包服务。
在jenkins中添加构建后的执行程序(以下是我的可执行文件地址)。
sh /data/tale/startry.sh

源码编译构建成功
使用ssh免密传输服务器需要先配置ssh key (已配置可忽略)
1、Jenkins机器生成 私钥ssh-keygen默认在~ssh下生成id_rsa和id_rsa.pub
2、复制id_rsa.pub内容到部署机器~ssh下authorized_keys
3、Jenkins机器ssh root@部署机器IP测试是否成功
4、Jenkins > 系统管理 >全局设置,往下翻到 ssh server
name:随便写
hostname:部署机器IP
Private Key: Jenkins 的 id_rsa
directory: / 根目录
user:root
5、点击 test ,显示 Success 即可

你可能感兴趣的:(jenkins,docker,maven)