配置Gitea和Jenkins实现自动化打包
需求:期望将代码推送到gitea后,配置Jenkins实现自动打包并部署
目录
- 流程
- 安装
- Jenkins配置
- 新增构建
- gitea配置
- tommcat配置
- 测试
流程
代码部署到Gitea中,当push代码时,会调用webhook触发Jenkins构建
执行maven构建后到脚本并打包,后续自动输出到tomcat
安装
前提:服务器已经安装docker、docker安装了tomcat、gitea
安装jenkins
docker安装Jenkins
尽量安装高版本的,低版本的插件容易出现版本过低导致无法安装
如果docker拉去官方镜像失败,则可以搜索别的镜像,需要注意版本是amd还是arm
拉取Jenkins镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:lts-jdk21
执行运行命令
docker run -d --name jenkins --restart=always -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home -v /opt/jenkins_transfer:/transfer -v /var/run/docker.sock:/var/run/docker.sock -u root --network blog -m 1g swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:lts-jdk21
docker run
-d --name jenkins --restart=always
-p 8080:8080 -p 50000:50000 //端口
-v jenkins_home:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-u root
--network blog //网络为blog,同一个项目docker组件都需要放到同一个网络便于通信
-m 1g //内存限制为1g 根据服务器确定
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:lts-jdk21 //镜像的地址
注:如果服务器为2G,还开起其他java程序,打包时容易导致内存超出导致Jenkins重启,这里添加Swap缓冲,保证能正常打包
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
执行命令获取默认密码,用于登陆
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Jenkins配置
登陆打开网页http://8.88.88.88:8080/ 输入获取的默认密码
初始化时选择自定义插件,取消选择所有插件进入
选择系统管理-插件管理-可利用的插件 安装下面插件 之后选择安装后重启 或者执行http://8.88.88.88:8080/restart
Localization: Chinese (Simplified) --汉化
Gitea Plugin --gitea对应配置
Maven Integration plugin --maven配置
Generic Webhook Trigger webhook插件gitea触发构建
Deploy to container 推送tomcat插件
选择系统管理-全局工具配置 保存并返回
配置maven 默认即可
配置jdk 指定java地址
配置git 指定git可执行地址
配置maven 指定maven地址,也可以使从 Apache 安装
新增构建
新增任务
任务名称:blog
选择构建一个maven项目
构建内容修改 这里只写需要修改的内容
源码管理
git http://gitea:3000/yuzl/blog.git git仓库地址
指定分支-*/dev 自定义使用的分支
源码库浏览器-选择gitea
Triggers
勾选Generic Webhook Trigger
新增一条
Name of variable:REF
Expression:$.ref
勾选JSONPath
新增一条
Name of variable:REPO_NAME
Expression :$.repository.full_name
勾选JSONPath
Token:gitea-trigger 可以自定义
Build
Goals and options:package -DskipTests -Dmaven.opts="-Xms128m -Xmx300m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m" 这里是由于内存问题修改 如果内存大于2g可以不填写后面的
Post Steps
勾选Run only if build succeeds or is unstable
执行 shell 作用为重命名war包
# 进入 target 目录
cd ${WORKSPACE}/target
# 将原始 WAR 包重命名为 blog.war
mv blog-0.0.1-SNAPSHOT.war blog.war
构建后操作
新增:Deploy war/ear to a container
WAR/EAR files:**/target/blog.war
Context path:blog(这里是tomcat访问路径)
新增tomcat版本:Tomcat 9.x Remote(我这里是9.x)
Credentials:添加,填写用户名和密码,在tomcat配置中,选中这个
Tomcat URL:http://tomcat:8080
应用并保存
gitea配置
blog项目-设置-web勾子-添加web勾子-Gitea
目标地址:http://jenkins:8080/generic-webhook-trigger/invoke?token=gitea-trigger
HTTP 方法:POST
POST Content Type:application/json
触发条件:推送事件
保存勾子
tomcat配置
添加管理员用户
/usr/local/tomcat-conf/tomcat-users.xml 通常可以挂载到外部路径
找到docker中tomcat配置文件tomcat-users.xml修改添加下面配置
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/> <!-- 脚本部署必须角色 -->
<role rolename="admin-gui"/>
<!-- 自定义 jenkins 部署用户,密码建议复杂些 -->
<user username="jenkins" password="Jenkins@123" roles="manager-gui,manager-script,admin-gui"/>
</tomcat-users>
解除 Tomcat 管理端 IP 限制
vi /usr/local/tomcat-conf/Catalina/localhost/manager.xml
<Context antiResourceLocking="false" privileged="true" >
<!-- 注释此行,允许所有IP访问管理端 -->
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
</Context>
测试
推送测试
如果推送失败,则查看报错信息,观察说哪个容器的报错,查看对应日志,通过AI查询解决问题