一鍵搞定!用Jenkins+Gogs讓你的SpringBoot項目飛起來
小nuo在玩转Next.js、React这些前端项目部署到Vercel时,心里那个痒啊,想着:“嘿,Vercel这家伙怎么这么牛,代码一提交就自动构建了?我能不能也搞个后端自动化部署呢?”于是乎,就有了这篇充满探索精神的文章。
初始化首先,咱们得把Jenkins长期支持(LTS)版本的镜像拉下来:
docker pull jenkins/jenkins:lts-jdk17
创建一个名叫“jenkins-net”的网络,这样我们的容器小伙伴们就可以在这个网络里愉快地聊天了(比如 Jenkins 和 Docker 守护进程容器)。
docker network create jenkins-net
编写docker-compose.yml
文件,这可是咱们让容器们开派对的邀请函哦:
services:
jenkins:
image: jenkins/jenkins:lts-jdk11
container_name: jenkins
privileged: true
user: root
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /var/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
networks:
- jenkins-net
networks:
jenkins-net:
driver: bridge
Jenkins与Gogs的完美邂逅:自动化部署大冒险
搞定JDK和Maven,让Jenkins变身超级英雄
首先,启动你的Jenkins,让它从沉睡中醒来并完成初始化。接着,点击“系统管理”,就像你走进了Jenkins的秘密基地。
然后,进入“全局工具配置”,这里就像是Jenkins的武器库,你需要给它配备好Maven和JDK这两把神兵利器。
配置好Maven和JDK后,别忘了点击“应用”和“保存”,这样Jenkins就能随时准备好为你服务啦!
接下来,我们需要为Jenkins配置一个API Token,并获取那个神秘的csrf令牌,这可是确保安全验证的关键哦!
在添加新Token时,输入一个帅气的名字,然后点击生成,记得保存这个Token,它可是你的通行证!
如果你使用的是高版本Jenkins,那么恭喜你,它已经升级了防御系统,需要获取一个特殊的字符串(csrf)来进行安全验证。打开运行Jenkins的主机命令行,输入如下命令,准备迎接新的挑战吧!
curl -u Jenkins用户ID:API Token <http://IP地址>:端口/crumbIssuer/api/json
先别急着走开,咱们得保存一个超级重要的字符串——crumb
。这玩意儿后面可是大有用处!
接下来,咱们要创建一个Jenkins任务,填上Gogs的小秘密。点击“新建任务”,然后选择“自由风格的软件项目”。
现在轮到填写Gogs的秘密了,别忘了哦!
最后一步,配置Gogs仓库的Git钩子。找到你的仓库,点击“仓库设置”,然后选择“管理Git钩子”。
在钩子文本里填上下面这段神奇的文字:
curl -X POST "<http://IP地址>:端口/job/任务名/build?token=任务的Gogs secret" \
-H "Jenkins-Crumb: 前面获取的Crumb" \
-u Jenkins用户ID:API Token --verbose
让Jenkins和Gogs手牵手,实现自动化部署
首先,咱们得告诉Jenkins去哪里找你的Gogs项目仓库。别忘了指定分支哦,就像给它指路一样!
接下来,设置一个触发器,让它在Gogs有新提交时自动开始工作。这就像给Jenkins装了个嗅觉灵敏的鼻子,一闻到代码变化就立刻行动起来!
然后,选择构建步骤,调用Maven来个大扫除并打包,记得加上 -DskipTests
,这样测试就不会拖慢我们的速度了。
最后,再加点料,点击“执行shell”,输入以下脚本内容(端口根据实际情况调整)。这样一来,我们的项目就能顺利跑起来了!
CONTAINER_NAME="my-jenkins-app"
docker build -t jenkins-demo:latest .
EXISTING_CONTAINER=$(docker ps -a -q -f name="^${CONTAINER_NAME}$")
if [ -n "$EXISTING_CONTAINER" ]; then
echo "发现已有容器:$EXISTING_CONTAINER,正在删除..."
docker rm -f "$EXISTING_CONTAINER"
fi
docker run -d -p 18080:18080 --name="$CONTAINER_NAME" jenkins-demo:latest
echo "等待容器启动..."
for i in {1..10}; do
if docker ps -q -f name="^${CONTAINER_NAME}$" &> /dev/null; then
echo "容器启动成功!"
echo "清理无效镜像..."
docker images -f "dangling=true" -q | xargs -r docker rmi
echo "清理完成!"
exit 0
fi
sleep 2
done
echo "容器启动超时!请检查错误日志。"
exit 1
哎呀,咱们今天要聊聊怎么用Docker来搞一场容器化的大戏!想象一下,你就是那个导演,而Dockerfile就是你的剧本。首先,别忘了在你的项目src目录旁边找个好位置,给这位“明星”——Dockerfile一个家。
接下来,是时候给这位明星写剧本了,也就是配置Dockerfile文件的内容啦。
FROM jdk17.0.10-aarch64:latest
COPY ./target/jenkins_demo-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
为什么是这样的配置呢?让我们一起揭开Maven打包项目后的神秘面纱吧!
其实,整个过程就是Jenkins和Gogs这对好基友的默契配合。这篇文章记录了我成功部署后端项目的经历,如果有什么地方没讲清楚,还请大家多多包涵。小nuo目前还在大二,正在努力学习中!如果你有任何问题或者想要分享的经验,欢迎在评论区畅所欲言哦~
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章