一。
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 run -d -p 8080:8080 -v /root/jenkins /var/jenkins_home 容器名称
通过上面方法启动的容器,只要定时打包备份/root/jenkins目录就可以了。升级Jenkins版本时,直接使用该目录,使用新镜像重新启动容器就可以了。
三。下载ruoyi开放源码
https://gitee.com/y_project/RuoYi
电脑端登录gitee,下载到本地
下载git,并通过git上传,具体操作可以查看另一篇文章
gitee上传代码
四。访问jenkins
进入jenkins容器,找到/var/jenkins_home上边的目录就可以查看密码
选择安装推荐的插件
可能会有插件安装报错,先跳过
开始使用jenkins,选择系统管理
找到插件管理
下载以下几种插件:
NodeJS Plugin
Maven Integration plugin
Publish Over SSH
Subversion Plug-in
输入插件名称搜索,插件勾选后点击“Install without restart”。
全局工具配置
新增jdk配置:复制java文件至jenkins容器中
maven配置
maven官网下载
下载
下载后解压缩:tar -zxvf apche-maven … 再上传至容器中
配置jenkins的maven
之后保存。
配置maven本地仓库
找到maven的conf目录,修改setting.xml文件
#进入目录并创建本地仓库
cd apache-maven && mkdir repo
#修改Maven仓库位置为
/var/jenkins_home/apache-maven/repo
原配置文件
修改后:不知道apache-maven中的特殊符号有没有影响
构建maven项目,报错,jenkins服务器没有安装git客户端
下载linux版本git安装至jenkins容器,依旧报错
在jenkins中添加credentials,点击下方的”添加“,配置gitee的用户名和密码和id
如果用户名和密码填错了
找到系统管理–manage credentials修改就可以了
构建触发器,可根据需要自定义
Poll SCM
按照设定的时间规则,先比较一次源代码是否发生变更,如果发生变更,那么就按设定的时间规则(例如:每天晚上10:00)build。否则,不进行build,通常采用这种方式。
构建环境
在构建运行后通过SSH发送文件或执行命令
可以先保存再进行下一步
回到首页–系统管理–下拉找到publish over ssh
进入jenkins容器,输入:ssh-keygen 敲三次enter
Passphrase: 如果生成秘钥的时候输入了密码,就在这里输入,否则留空
把生成的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机器私钥的文件路径)也可以
填写名称、主机ip、ssh用户名、远程的目录(最好写/,后面就可以用绝对路径了)
不要勾选【Use password authentication, or use a different key】使用密码登录
点击【Test Configuration】,测试连接,显示Success即可;
我的点测师连接后报错:
测试是否可以通过ssh连接:ssh root@IP地址
可以连接,不过要输入密码才能连接
应该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]的会话。消息[验证失败]]
查看ssh日志:journalctl --unit=sshd
依旧不行,上边这种方法是jenkins容器和服务器在同一台3服务器,不知道是不是这个原因。换成windows服务器和linux虚拟机。
1
配置jak环境1.8
2
配置maven环境:
下载maven压缩包
将maven压缩包解压到指定目录
配置MAVE_HOME环境变量
在PATH环境变量后面加上%MAVE_HOME%\bin
配置maven本地仓库
找到maven安装包—conf—setings.xml localrepository是本地仓库地址
3
安装tomcat运行环境。
4
下载jenkins war 包
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”。
7
本地电脑要配置jdk和maven环境
首页–manage jenkins — 配置jdk和maven
点保存
8
首页–manage jenkins --Configure System
找到Publish over SSH点新增。remote derectory建议写成根目录/
remote directory :配置要远程的服务器地址(可随意)
勾选
输入password输入服务器密码,和上图的username相匹配。其余默认
点test configuration 成功。最后保存
9
构建docker镜像
mkdir /usr/local/jenkins/jenkinscontain
cd /usr/local/jenkins/jenkinscontain
touch Dockerfile
vim Dockerfile
每一个 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
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项目
配置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
只须要拷贝一份本地的git.exe的绝对路径到 Path to Git executable 下,就能够了
在晚上的八点运行,如果没有变动则不运行
remote directory 在前面配置的ssh server中配置的基础目录上生成放资源的目录
构建环境选择 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默认的jar包构建路径(每个jenkins版本可能都不一样)
点击项目
开始构建,第一次构建时间可能久,build history 可以看到进程
13
可以将build的jar包放在本地测试运行一下,也可以忽略这步。
将代码包的sql文件(ry_20210924.sql,quartz.sql)导入root用户,database选择新增的ry。
启动若依程序包,就可以访问了
说明程序包没问题。
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的构建历史–控制台输出–查看jenkins build的jar包存放地址
C:\Users\86137.jenkins\workspace\ruoyi1028\ruoyi-admin\target\ruoyi-admin.jar
修改成source file地址
测试用:
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
正常配置:
可以在远程目标服务器看到传输的文件。
16
在jar包当前目录下创建可执行文件startry.sh
意思:先kill掉运行的jar包进程,再重新启动
ruoyi.log指将内容保存
0 指标准输入(一般指键盘)
1 指标准输出(一般指显示输出的信息,用户终端控制台)
2 指标准错误(错误信息输出)
&1 指继续输出到标准输出(让系统识别)最后一个&是后台运行
构建程序前需要先在远程服务器启动一下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 即可