springboot+jenkins+docker自动化部署

零、构建过程:

本文的自动化构建实现的流程是:
在这里插入图片描述
其中红色部分是本地操作的内容,剩下的都是自动执行的部分。当我们编写完代码、测试、Commit、Push到Github后,会触发Github Hook。Github会给我们设定好的Jenkins地址发一个信号,Jenkins收到信号后会执行Pipeline。本文介绍的内容比较简单,Pipeline不涉及复杂操作,绿色部分是本文中Pipeline执行的内容。首先会从Github仓库获取最新代码,之后编译、测试。测试没有问题就会将编译生成的jar文件和java环境及一些命令打包成一个Docker镜像。最后再运行Docker容器,刷新我们的网站就可以看到网站发生了变化。

本文方法需要服务器有公网IP。可以使用frp将内网IP映射到云主机上得到公网IP。Ubuntu下使用FRP

一、使用docker安装jenkins:

我一开始使用docker安装后面无法使用宿主机的docker构建项目镜像,后面没时间折腾干脆直接装了。跳往 二、Ubuntu安装jenkins:

1. 拉取jenkins镜像

docker pull jenkins/jenkins

2. 为Jenkins建立挂载目录并未目录授权,我这里的目录为 /home/nc/software/jenkins/

mkdir /home/nc/software/jenkins/
sudo chown -R 1000:1000 /home/nc/software/jenkins/

3. 运行镜像

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/nc/software/jenkins:/var/jenkins_home jenkins/jenkins
  • -d 表示已守护线程运行,即为后台运行
  • -p 表示docker容器和端口的映射,后面的是容器的端口,前面的是宿主机的端口,
  • -v 表示数据卷的映射,后面是容器内的文件夹地址,前面为宿主机的
    在这里插入图片描述

4. 浏览器打开http://ip:8080进行初始化

在这里插入图片描述

5. 进入容器的终端,查看初始密码

sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

6. 安装推荐的插件

在这里插入图片描述
安装完成后创建管理员,填写完成提交即可

至此, jenkins已经安装完毕啦

二、Ubuntu安装jenkins:

参考:https://blog.youkuaiyun.com/weixin_44623010/article/details/114659049

1. 安装java JDK环境

# 更新软件包列表
sudo apt-get update

# 安装openjdk-8-jdk
sudo apt-get install openjdk-8-jdk

# 查看java版本,看看是否安装成功
java -version

2. 安装jenkins

# 将存储库密钥添加到系统
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

# 将Debian包存储库地址附加到服务器的sources.list
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/  > /etc/apt/sources.list.d/jenkins.list'

apt-get update
sudo apt-get update

# 安装Jenkins
sudo apt-get install jenkins

3. 配置并启动Jenkins

# 查看端口是否占用
lsof -i:8080

# 启动Jenkins
systemctl start jenkins

# 稍等一会查看状态
systemctl status jenkins

三、配置项目

编写项目的Dockerfile

在项目的根目录中新建一个文件,名称为Dockerfile ,填入以下内容:

FROM openjdk:8-jdk-alpine
MAINTAINER nicahead@gmail.com
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && mkdir -p /event
WORKDIR /event
EXPOSE 9001
ADD ./target/event-api-0.0.1-SNAPSHOT.jar ./
CMD java -Djava.security.egd=file:/dev/./urandom -jar event-api-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

我这里的项目名称叫做event-api,Dockerfile 需要根据自己情况编写

四、上传项目到远程仓库

  • 可以选择上传到GitHub或gitee,最近GitHub老是打不开,所以我选择gitee。
  • 注意需要去插件管理里安装gitee插件,否则下面步骤中的某些选项会不存在。

五、创建任务

1. 创建一个自由风格的项目

在这里插入图片描述
在这里插入图片描述

2. 在源码管理中选择git配置好远程仓库地址和密码

  • 我们本地是会从远程仓库拉取代码进行构建的,所以需要告诉Jenkins远程仓库在哪。如果是public的仓库好像不用写用户名密码。
    在这里插入图片描述

  • 这里的Repository URL可以使用http的,也可以使用ssh的,我这里使用的HTTP协议的。
    在这里插入图片描述

  • HTTP协议的话,需要输入账号密码来验证,点击Add,输入的账号密码并保存,记得kind选择“Username with password”。ssh的要配置ssh公钥。
    在这里插入图片描述

  • 然后在Credentials选中刚刚新增的账号密码,红色提示消失;

3. 构建触发器

  • 选择使用gitee webhook触发构建。我们前面将Jenkins与远程仓库建立了单向连接,Jenkins可以访问远程仓库。但是什么时候构建项目呢?触发器的作用是,当我们提交代码到远程仓库,触发了钩子函数,远程仓库则通知Jenkins,代码有更新,你需要拉取代码,重新构建。这样才实现自动部署。

URL:
在这里插入图片描述
生成密码:
在这里插入图片描述

  • 然后到gitee的设置里配置一下:
    URL和密码和上面对应
    在这里插入图片描述
  • 可以测试一下:
    在这里插入图片描述

4. 回到Jenkins的配置,增加构建步骤。

  • 这一步是告诉Jenkins,代码拉取下来之后如何构建。打包?docker容器?tomcat容器?
  • 本文使用maven打成jar包部署。首先增加一个maven打包的步骤:
  • 这里的maven需要在管理Jenkins->global tool configuration里新增,不要选默认。应该也可以使用本机安装的maven。
    在这里插入图片描述
  • clean以及package:
    在这里插入图片描述
  • 打包完成后需要构建镜像,运行容器,可以通过shell脚本运行:根据我们三中的dockerfile文件构建镜像,并运行容器。具体流程是 判断容器是否存在,存在先停止容器-> 删除容器 -> 删除镜像 -> 构建镜像 -> 启动容器

参考:https://blog.youkuaiyun.com/keizhige/article/details/105819856

#源jar路径  即jenkins构建后存放的路径
SOURCE_PATH=/var/lib/jenkins/workspace/EventKG
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=event-api
TAG=1.0
#宿主机端口
SERVER_PORT=9004
# 容器端口
CONTAINER_PORT=9001
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME:$TAG" | awk '{print $3}')
if [ -n "$CID" ]; then
  echo "存在容器$SERVER_NAME, CID-$CID"
  docker stop $SERVER_NAME
  docker rm $SERVER_NAME
fi
# 构建docker镜像
if [ -n "$IID" ]; then
  echo "存在$SERVER_NAME:$TAG镜像,IID=$IID"
  docker rmi $SERVER_NAME:$TAG
else
  echo "不存在$SERVER_NAME:$TAG镜像,开始构建镜像"
  cd $SOURCE_PATH
  docker build -t $SERVER_NAME:$TAG .
fi
# 运行docker容器
docker run --name $SERVER_NAME -d -p $SERVER_PORT:$CONTAINER_PORT $SERVER_NAME:$TAG
echo "$SERVER_NAME容器创建完成"
  • 这个时候执行宿主机的docker时会出现permission denied的情况。需要将jenkins加入docker用户组。
usermod -a -G docker jenkins

systemctl restart jenkins
  • 仅仅将jenkins用户加入docker组还不够,必须要重启Jenkins才可以生效!

  • 保存一下,再点击立即构建。没有问题的话应该可以成功构建并且访问http://<server_ip>/可以看到项目页面。
    在这里插入图片描述

### Spring Boot与Unidbg集成概述 在现代软件开发环境中,Spring Boot因其简洁性和高效性成为构建Java应用程序的理想框架。与此同时,Unidbg作为一个功能强大的动态链接库(DLL)模拟器以及用户态调试工具,在逆向工程领域有着广泛应用。为了实现两者之间的有效协作,开发者可以遵循特定的方法来设置环境并编写必要的代码逻辑。 #### 配置依赖项 对于希望将Unidbg引入到基于Spring Boot的应用程序中的开发者来说,首先需要确保项目的`pom.xml`文件包含了正确的Maven仓库地址和版本号以获取最新的Unidbg库[^1]: ```xml <dependency> <groupId>com.github.unidbg</groupId> <artifactId>unidbg-all</artifactId> <version>${latest.version}</version> </dependency> ``` 这里`${latest.version}`应当替换为实际发布的最新稳定版次。 #### 初始化Unidbg实例 当完成上述配置之后,可以在Spring Boot应用启动类或者其他合适的地方创建Unidbg对象用于后续操作。下面是一个简单的例子展示如何初始化这个过程[^2]: ```java import com.github.unidbg.Unidbg; import com.github.unidbg.linux.android.dvm.DalvikVM; public class UnidbgInitializer { private final DalvikVM vm; public UnidbgInitializer() throws Exception{ Unidbg unidbg = new Unidbg(); this.vm = unidbg.createDalvikVM("/path/to/your/app.apk"); // 加载APK包内含有的so文件路径 String soPath = "/data/data/com.example.app/lib"; vm.loadLibrary(soPath, false); } } ``` 这段代码展示了怎样通过指定目标Android APK的位置及其对应的.so文件所在目录来进行加载准备动作。 #### 实现具体业务逻辑 有了前面的基础工作后,就可以着手处理具体的逆向分析任务了。比如调用某些方法、拦截函数执行流或是修改参数值等。这通常涉及到深入理解被测APP内部结构,并利用Unidbg提供的API接口去达成目的。例如,可以通过挂钩(hooking)技术改变原生C/C++层面上的行为模式[^3]: ```java // 假设我们要hook某个名为exampleFunction的本地方法 vm.hook("libnative-lib.so", "JNI_OnLoad").put(new HookCallback(){ @Override protected void onCall(Emulator<?> emulator){ System.out.println("[+] exampleFunction has been called!"); // 这里可以根据需求自定义响应行为... } }); ``` 以上仅作为概念性的指导说明;针对不同场景下的精确做法可能会有所差异,请参照官方文档进一步学习掌握更多细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值