Auto Deploy SpringBoot with Jenkins and Docker
title: Auto Deploy SpringBoot with Jenkins and Docker tags: [“docker”, “Jenkins”,“SpringBoot”,“cicd”] date: 2022-04-18 draft: false
Auto Deploy SpringBoot with Jenkins and Docker
根据之前文章《UsageDocker Installation好Jenkins》为前提搭建好Jenkins,不明白请看https://www.yanxizhu.com/index.php/archives/138/。
环境说明:jenkins为dockerDeployment,Docker+Jenkins+Gitee+JDK11+Maven3.8.5。
以后每次改动Code,push提交到giee码云后会自动Deployment,不用手动点击Deployment。
一、全局工具配置
【首页】-【系统管理】-【全局ToolsConfiguration】

我之前StartjenkinsContainer映射Parameter如下,根据自己映射Path自行修改。
docker run -p 10240:8080 -p 10241:50000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-v /mydata/maven/apache-maven-3.8.5:/maven/apache-maven-3.8.5 \
-v /mydata/jdk/jdk-11.0.10/:/jdk/jdk-11.0.10 \
-v /mydata/maven/repo:/mydata/maven/repo \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-d jenkins/jenkins:lts
上面很重要,注意。
-
jdk配置

jdk11Path
/jdk/jdk-11.0.10 -
maven配置

maven3.8.5Path
/maven/apache-maven-3.8.5 -
git配置

DefaultPath
/usr/bin/git -
docker配置

dockerPath
/usr/bin
注意点:
1、jenkinsContainer里面自带git,可通过CommandViewPath。
2、注意自己jdk、mavn、dockerInstallationPath。
Viewjenkins自带gitPathCommand:
which git
二、插件安装
【首页】-【系统管理】-【插件管理】
插件1:
Publish Over SSH
插件2:
Gitee Plugin
如果插件Installation慢,可以修改源,请参考修改方案,https://www.yanxizhu.com/index.php/archives/138/
注意:如果在【全局ToolsConfiguration】没有对应的选项,就是缺少相应插件。
三、系统配置
1、SSH remote hostsConfiguration
新增加Configurationssh登陆凭证,此步骤的主要作用是jenkins PackageImage后,能够远程去登陆和ExecuteScriptFile。
Hostname:xxx.xxx.xxx.x..(需要登陆的Serverip)
Port:22(ssh登陆端口)
Credentials:登陆账号和密码(此处点击[添加]按钮增加一个)
如果是本机可以不用Configuration
2、Gitee Configuration
链接名:
gitee
Gitee Domain URL:
https://gitee.com
添加凭证
Gitee API V5 的私人令牌(Get地址 https://gitee.com/profile/personal_access_tokens)
通过上面连接Create一个令牌,然后添加到这里。
四、准备项目
1、本地新建一个SpringBoot项目,新建HellocerConller控制层
package com.yanxizhu.jenkins.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @description: Jenkins自动部署测试
* @author: <a href="mailto:batis@foxmail.com">清风</a>
* @date: 2022/5/8 17:30
* @version: 1.0
*/
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello World!";
}
}
本地Start项目确保通过127.0.0.1:8080/hello能够访问。
2、编写Dockerfile
# 指定是基于哪个基础镜像
FROM openjdk:11
# 作者信息
MAINTAINER batis
# 挂载点声明
VOLUME /tmp
# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /target/jenkins-demo-0.0.1-SNAPSHOT.jar springboot.jar
#shell脚本
RUN bash -c 'touch /springboot.jar'
# 将容器的8000端口暴露,给外部访问。
EXPOSE 8000
# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]
注意:修改jdkVersion、Package后名称、端口信息
五、代码上传
登录码云新建仓Library,名字随意将Code关联并提交到码云。新建仓Library、Codepush自行google。
六、WebHooks 管理配置
1、打开仓Library -> 管理 -> 右侧的webhooks

URL:填入Server公网IP地址
WebHook密码通过以下生成。
七、部署SpringBoot项目
1、新建部署任务
任务名字随意、Build一个自由风格的软件项目。

2、General

描述随意填写,丢弃旧的Build策略,保持Build的天数1,保持Build的最大个数3,根据自己需要自行修改。
3、源码管理
Choosegit

Repository URL为自己gitee码云仓Library地址。

Credentials点击“添加”,Credentials凭证,Choose通过用户名密码添加,id、备注可以为空。
4、构建触发器
其它默认:

找到Gitee WebHook 密码,点击“生成按钮”生成,然后将该密码填入上面 “六、WebHooks 管理Configuration”中。

轮询 SCM策略:
* * * * *
注意:*中间有空格,当您输入 ”* * * * *” 时,意思为”每分钟”?也许您希望 “H * * * *” 每小时轮询。
5、构建
ChooseExecuteshellScript
#!/bin/bash -lex
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
mvn clean install -Dmaven.test.skip=true
sleep 1
docker build -t app_docker:1.0 -f ./src/main/Dockerfile .
sleep 1
docker run -d -p 8000:8000 --name app_docker app_docker:1.0
注意自己端口名称。
6、访问测试
通过自己xxx.xxx.xx.xx:8000/hello即可自己写的helloword了。
以后每次改动代码,push提交到giee码云后会自动部署,不用手动点击部署。
7、问题记录及解决方案
比如:
1、查不到mvn、docker、jdkCommand,可能是jenkinsContainer中环境ConfigurationProblem,可以参考《Jenkins Docker Springboot Deployment》
2、如果开启了防火墙注意Development相应端口或关闭防火墙
3、Deployment遇到Problem,ViewDeploymentLogging,以及google、baidu
相关参考: