docker安装jenkins,jenkins远程ssh发布springboot子项目全过程(挖坑踩坑之后总结的全过程)
一.什么是jenkins?
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
二.使用docker的方式安装jenkins
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执行脚本很多情况下执行绝对路径才行
下面是报错截图