docker安装jenkins,jenkins远程ssh发布springboot子项目全过程(挖坑踩坑之后总结的全过程)

一.什么是jenkins?

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

二.使用docker的方式安装jenkins

docker安装的话坑有点多的,比较推荐用war包安装.(但是谁让我头铁呢~✧(≖ ◡ ≖✿) )

1.搜索jenkins

docker search jenkins

 

 官网推荐安装的是: jenkinsci/blueocean映像,所以我这里也安装这个

 2.拉取下载

docker pull   jenkinsci/blueocean

2.运行镜像

(这里有坑!注意!!)
docker run --name docker_jenkins -p 8181:8080 -v /usr/local/javasoft/jenkins/home:/var/jenkins_home  jenkinsci/blueocean

在这里挂在了目录和端口之后然后发现并不能运行

 报错Permission denied 一般是权限不足 ,那么我就在运行的时候加一个 -u 0  这命令的意思是覆盖容器中内置的帐号,该用外部传入,这里传入0代表的是root帐号Id。这样再启动的时候就应该没问题了,但是!你以为就加一个 -u 0就行了? 其实不是 为了一步到位 防止后面启动成功部署的时候遇到问题,这里我先放一个能够成功的命令

docker run -u 0 -d --name jenkinsci_blueocean  -p 8081:8080 -p 50000:50000  -v /var/run/docker.sock:/var/run/docker.sock   -v /usr/lib/jvm/java/bin/java:/usr/local/java/jdk1.8.0_252/bin/java  -v  /usr/lib/jvm/java:/usr/local/java/jdk1.8.0_252  -v /usr/local/apache-maven-3.6.3:/usr/local/maven  -v /usr/local/javasoft/jenkins/home:/var/jenkins_home  jenkinsci/blueocean

解释:  把宿主机的docker java maven jenkins全部挂载起来,为了防止以后出现这样的错。其实java目录可以不挂载,里面有自带的java目录 到时候进入容器自己 which java找到目录添加就行了。后面具体操作都有。

 !!!这里还有个大坑  ≡ω≡  当时我就是这么启动完成了。但是我忘记了给项目挂载目录和端口了 ,虽然也有其他的解决方法,但是以防万一 这里除了基本的挂载目录之外。也要注意。万一需要在本机运行的话。需要在上诉命令里面加上自己项目的端口或者tomcat的端口之类的别忘了

到这里安装也就ok了,然后打开网址:ok 启动成功 ,提示等待一下 那我就等一会

三.jenkins的使用安装与发布

 1.使用jenkins安装插件,发布项目前的准备

找到进程号进入jenkins 找到密码

docker exec -it 318afac26836 /bin/bash
vi /var/jenkins_home/secrets/initialAdminPassword

ok找到。输入之后登陆。

推荐使用直接点击安装推荐插件,后续用到什么插件再安装。

 

安装好了之后创建用户,之后就是无限下一步

 

 ok完成,进入到了管理页面

点击系统管理 安装插件

 

 

我这里需要装 maven 插件  还有远程部署项目的需求所以需要安装ssh插件

插件名称为:Maven Integration   和  Publish Over SSH

我这里就以maven举例。(其他的插件也是同理这里以maven做演示) 点击直接安装 安装完成后空闲时重启jenkins

 

 

 

 安装好了之后,会重启一下,等待一下之后输入刚才创建的账号密码,接下来就配置jdk git maven和ssh等一些配置

 

 

具体的地址 可以进入容器内部自己找地址。maven就是你刚才挂载的容器地址,我这里就不截图了

 

 

接下来配置远程主机的地址

也能配置本机的地址,上文我忘了给本机的项目开放端口就干脆用ssh连接本机发布一些项目这是后话这个看自己选择

 

 

 

打开之后拉倒最后找到这个,配置远程主机。有几个配置几个。看自己需求

 

 

 

如果遇到这个错误,你需要提前在服务器上创建好目录不然会失败

ok 这样一切都配置完成了 开始准备发布项目了

2.发布项目

新建项目,选择maven.

 

 

 

 

 

  

 

 

 

 

springboot里面肯定有很多子项目,直接发一整个项目肯定不现实,参考例子

package -pl 父目录/子项目 -am -DskipTests

打包构建完成之后就是远程发布了,这里选择ssh

 

 

jar包的目录地址:打开你的挂在的目录之后找到workspace,都在这里面,找到你刚才创建的任务名,进入这个任务名之后,任务名之前的目录是不用写的。然后在任务名之后,举例:csp-web开始找到你的jar包就行。

 

 ok 到这里就完成了。结尾附上脚本

脚本解释,后续有脚本发布改进。这个有便于理解

#Jekins构建完成后会自动关闭进程及其子进程,加上这一句可以避免自动关闭
BUILD_ID=DONTKILLME
# 下面这一句代表该文件使用的是bash语法
#!/bin/bash
#获取你想运行jar包的进程号,grep -v意为不包括(grep -v grep指的是不包括grep下的所有信息),awk '{print $2}'意为取第二个字段输出,赋值给pid
pid=`ps -ef | grep 子工程jar包名称.jar | grep -v grep | awk '{print $2}'`
#如果存在则把该进程杀掉,$符号表示获取变量的值
if [ -n "$pid" ]
then
   kill -9 $pid
fi
#把jenkins打的jar包复制到自己指定的目录下
cp  /jenkins/workspace/父工程项目名称/子工程项目名称/target/子工程jar包名称.jar /自己指定的目录路径/
echo "启动jar包"
#最后启动jar包并把日志输出到指定的文件中以便查看
nohup java -jar /自己指定的目录路径/子工程jar包名称.jar > /自己指定的目录路径/csp.log &

ok到这里其实已经都ok了 

在这里就可以看到自己新建完成的任务

右击立即构建

然后左边列表有正在构建的列表,点进去

有当前构建的次数。上面有正在构建的进度条。点进去我们看控制台的输出

 

点击这个就可以看到输出

 

然后就可以看自己的项目打包和发布日志。。。。。ok完成  (๑•̀ㅂ•́)و✧

到这里就结束了。可以到目标主机看看 有没有刚才新建的文件夹和jar 还有项目是否运行

 

 👌!!到这里就结束了😄

改进:脚本发布

每个微服务有这样写脚本台麻烦了,那我们就单独写一个脚本出来执行脚本就行

1.创建测试脚本

touch test.sh

2.脚本内容

#!/bin/bash
source /etc/profile
echo '开始执行脚本'
project=$2
dir=/usr/local/javasoft/csp/$1/
echo "当前jar包:$project"
cd $dir
echo "当前目录:$dir"
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
echo "当前jar的pid为:$pid"
if [ -n "$pid" ]
then
   kill -9 $pid
fi
nohup java -jar $dir$project --spring.profiles.active=test >/dev/null 2>log &
echo "发布成功"
echo "具体日志详情查看/usr/local/javasoft/csp/$1/logs"

3.赋权脚本

 ok这样就完成了

chmod +x test.sh

4.修改ssh配置

 然后在任务配置里面 切换到脚本的目录后,执行脚本就行。后面添加的2个参数,对应脚本的$1 $2 分别是项目名和jar包名

注意!这里也是有坑的。如果脚本未指定绝对路径路径的话可能会报错

由于找不到远程服务器的环境变量,所以在shell脚本中进行指定;另外,jenkins执行脚本很多情况下执行绝对路径才行

下面是报错截图  

 

 

 

 

 

 

 

posted @ 2020-09-18 16:06  Nuti  阅读(2749)  评论(1编辑  收藏  举报