博客详情页背景图

配置Gitea和Jenkins实现自动化打包

需求:期望将代码推送到gitea后,配置Jenkins实现自动打包并部署

2025-12-21 · 服务器

目录

  1. 流程
  2. 安装
  3. Jenkins配置
  4. 新增构建
  5. gitea配置
  6. tommcat配置
  7. 测试

流程

代码部署到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查询解决问题