本文主要实现linux服务器上如何自动化部署springboot应用,linux操作系统为CentOS 8.3 64位,win10。实现jinkens在本地(win10)打包再发送到远程服务器上(CentOS)。
1. docker环境安装(CentOS+win10)
1)安装yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2
- 为yum源添加docker仓库位置
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
yum install docker-ce
- 启动docker
systemctl start docker
2. portainer安装(CentOS+win10)
1)下载jenkins的portainer镜像
docker pull portainer/portainer
2)在docker容器中运行
docker run -d -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name portainer portainer/portainer
3. jenkins安装(win10)
1)下载jenkins的docker镜像
docker pull jenkins/jenkins
2) 在docker容器中运行jenkins
docker run -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins
4. jenkins配置
1)安装插件Publish over SSH
进入插件管理,找到SSH插件进行安装即可。
找到:系统管理->系统配置->Publish over SSH
Passphrase为远程服务器的密码。
Name为远程服务器名称,Hostname为服务器ip, Username为服务器登录的用户名。
5. 新建任务
构建一个自由风格的软件项目,进行任务配置:
-
源码管理:配置git
-
构建:
增加构建步骤->调用顶层maven目标,添加应用启动模块maven配置:
增加构建步骤->Send files or execute commands over SSH, 添加远程脚本命令配置:
Transfers配置如下:
6. 创建DockerFile
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD api-1.0.1-SNAPSHOT.jar /api.jar
# 运行过程中创建一个api.jar文件
RUN bash -c 'touch /api.jar'
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/api.jar"]
# 指定维护者的名字
MAINTAINER songrenwei
7. 创建shell脚本命令
创建run.sh:
#!/usr/bin/env bash
# 定义应用组名
group_name='spring-boot-demo'
# 定义应用名称
app_name='api'
# 定义应用版本
app_version='1.0.1-SNAPSHOT'
# 定义应用环境
profile_active='prd'
# 打包后在jenkins的目录
source_path='/mydata/jenkins_home/workspace/api'
# Dockerfile执行jar包的地址
des_path='/mydata/deploy/application/api'
# 复制jar包
# cp ${source_path}/api/target/api-1.0.1-SNAPSHOT.jar ${des_path}/api-1.0.1-SNAPSHOT.jar
# echo '----copy jar----'
# 删除容器及镜像
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${app_name}:${app_version} .
echo '----build image----'
docker run -p 8081:8081 --name ${app_name} \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d ${app_name}:${app_version}
echo '----start container----'
8. 构建任务
点击任务,立即构建:
8. 构建结果
打开服务器portainer,查看springboot应用运行情况:
api应用已成功运行!