开发者学堂课程【基于 Docker 与 Jenkins 实现自动化部署 :Jenkins 实现自动打包并且启动服务】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/637/detail/10183
Jenkins 实现自动打包并且启动服务
内容介绍
一、打包完成后的运行问题
二、如何执行脚本(重点)
三、无法访问网页却可以在 docker 中访问?
四、模拟查看是否自动化
一、打包完成后的运行问题
打包操作完成后,如何运行?
误区:
1.直接在容器里写入 java-jar meite_mayikt_springboot-0. 0.1-SNAPSHOT.jar
。但这属于手动运行,就不算自动化了。
2.端口号出现冲突。
例:原本的端口号8081出现冲突,因此将端口号改为8087,然后进行提交,进行重新构建就可将端口号修改为8087。最后人为执行 java-jar,输入代码:
bash-4.4
$
^
C
bash-4.4
$
^
C
bash-4.4
$
^
C
bash-4.4
$
java -jar meite
_
mayikt
_
springboot-0.0.1-SNAPSHOT.
j
ar
Error
:U
nable to access jarfile meite
_
mayiktspringboot
-0.0.1-SNAPSHOT.jar
bash-4.4
$
^C
bash-4.4$
l
s
bash-4.4
$
l
s
bash-4.4
$
pwd
/var/jenkins
_
home/workspace/meite
_
may
i
kt
_
springboot/target
bash-4.4
$
cls
bash: cls: command not found
bash-4.4
$
l
s
bash-4.4
$
pwd
/var/jenkins home/workspace/meite
_
mayikt_ springboot/target
bash-4.4
$
l
s
bash-4.4
$
l
s
bash-4.4
$
cd
^C
bash-4.4S
^C
bash-4.4
$
cd/var/jenkins_home/workspace/meite_mayikt
_
springboot/target/
bash-4.4
$
l
s
c
lasses
maven-archiver
meite
_
mayikt
_
springboot-0.0.1-SNAPSHOT.
j
ar
generated-sources
maven-status
meite_mayikt
_
springboot-0.0.1-SNAPSHOT.
j
ar.original
b
ash-4.4
$ java-jar meite_mayikt_springboot-0.0.1-SNAPSHOT.jar
之后端口号就会改为8087
二、如何执行脚本(重点)
但是如果还是像以上人工去发布那还是没有解决自动化的问题。现在 java 包已经被打好了,只是前面还缺少 java-jar 帮忙自动化运行,所以需要还需要执行脚本。
例:执行 shell 脚本
1.SERVER_NAME 后先定下服务名称:meite_mayikt_springboot,服务名称最好和发布名称相同。
2.JAR_NAME 表示 jar 包里原地址的名称,jar 包原地址的名称可以根据日志分析出来。
首先返回进入<如图>位置,进入控制台输出,
找到此行代码
[INFO] Installing /var/jenkins_home/workspace/meite_mayikt_ springboot/target/meite_mayikt_sprineboot=0.0.1-SNAPSHOT.jar to
var/ jenkins_home/.m2 /repository/com/mayikt/meite_mayikt_ springboot/0. 0.1-SNAPSHOT/meite_ meyikt_springboot-0.0.1-SNAPSHOT.jar
发现名称为 meite_mayikt_springboot-0.0.1-SNAPSHOT
,将其复制回 JAR_NAME=
之后。
3. JAR_PATH 表示 jar 包的位置,jar 输出目录。
同样到控制台找到此行代码
[INFO] Installing /var/jenkins_home/workspace/meite_mayikt_ springboot/target/meite_mayikt_sprineboot=0.0.1-SNAPSHOT.jar to
var/ jenkins_home/.m2 /repository/com/mayikt/meite_mayikt_ springboot/0. 0.1-SNAPSHOT/meite_ meyikt_springboot-0.0.1-SNAPSHOT.jar
将代码/var/jenkins_home/workspace/meite_mayikt_springboot/target
复制到 JAR_PATH=
之后和JAR_WORK_PATH=
之后。
4. kill-9 $id 表示会检查之前某个进程的存在,之后就会杀死这个进程。
5.java-jar 表示重新启动进程
6、点击保存、立即构建、检查控制台。
三、无法访问网页却可以在 docker 中访问?
文件项目启动成功后,通过网页访问192.168.212.252:8087会发现访问失败,但在 docker 容器中输入 bash-4.45 curl 127.0.0.1:8087访问时却可以访问。
有同学可能会认为是防火墙没关闭导致了这样的情况,但实际上通过关闭防火墙的操作之后发现,网页只是可以访问端口80却依旧无法访问端口8087,所以防火墙不是原因。
真正的原因在于 Jenkins 是通过容器进行部署的,因此 java 服务也是在容器中运行的,它能够在内部运行却不可以在外部运行。我们可以通过改变映射来解决这一问题。
如何改变映射:
1.将原有
docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
改为
docker run -p 8080:8080 -p 8087:8087-p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
2. 将容器重启
写入 bash-4.4$ exit
exit
[root
@
localhost
~
]
#
systemctl restart docker
3. 清算未运行的容器
写入[root
@
localhost
~
]
# docker rm $(sudo docker ps -a -q)
4. 启动命令:
[root@localhost ~]#
docker run -p 8080:8080 -p808
7
:808
7
-p 50000:50000-v jenkins_data:/var/jenkins_home jenkinsci/blueocean
5. 重启 Jenkins ,登录并运行,在控制台查看 springboot 项目是否启动,发现已经启动则再进行网页访问,发现可以访问。
随堂答疑:-p什么意思?
答:表示容器与外部映射端口号。因为容器里有端口号之后,想让外部访问的话需要做映射。
四、模拟查看是否自动化
1.进入文件
代码:
package com.mayikt.controller;
import org.springframework.boot.SpringApplication;
//1
@SpringBootApplication
@RestController
public class App {
@RequestMapping("/")
public String index(){
return "
每特教育独创基于 Jenkins+docker 部署 SpringBoot 项目QQ644064779..... www.mayikt.com";
}
public static void main(String[] args){
SpringApplication.run(App.class, args)
}
}
2. 将加粗部分替换为其他文案。
3. 提交代码,Commit message 文本框中填入 修改×××文案。
4. 查看控制台输出,刷新网站查看是否更新文案,发现文案已更新。