【Github/Gitee Webhook触发自动部署-Jenkins】

发布于:2025-06-01 ⋅ 阅读:(28) ⋅ 点赞:(0)

Github/Gitee Webhook触发自动部署-Jenkins

Gitee Jenkins Docker Host 代码提交触发 Webhook 拉取代码到 WORKSPACE 解压 WAR 到 tomcat/new-app docker-compose build docker-compose up 健康检查 (HTTP GET /health) 返回 200 OK 标记部署成功 Gitee Jenkins Docker Host

1、创建项目

1.jenkins-安装

  • jenkins执行docker compose
    • 这里介绍方式一: 安装Docker-cli, 并挂载Docker 套接字
创建自定义 Jenkins 镜像

nano Dockerfile

# Dockerfile.jenkins
FROM jenkins/jenkins:2.504.2-lts-jdk21

USER root

# 创建并配置APT源(华为云源)
RUN echo "deb http://repo.huaweicloud.com/debian bookworm main" > /etc/apt/sources.list && \
    echo "deb http://repo.huaweicloud.com/debian bookworm-updates main" >> /etc/apt/sources.list && \
    echo "deb http://repo.huaweicloud.com/debian-security bookworm-security main" >> /etc/apt/sources.list

# 安装 Docker CLI 和 Compose V2
RUN apt-get update && \
    apt-get install -y ca-certificates curl gnupg && \
    install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    chmod a+r /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get update && \
    apt-get install -y docker-ce-cli docker-compose-plugin

# 创建 Compose 别名
RUN ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose

USER jenkins

构建镜像

docker build -t myjenkins-dockercil .
启动Jenkins

nano docker-compose.yaml

services:
  jenkins:
    image: myjenkins-dockercil  # 通过官方镜像jenkins/jenkins:2.504.2-lts-jdk21构建
    container_name: jenkins-blueocean
    user: root
    restart: on-failure
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins-data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/certs.d:/etc/docker/certs.d:ro
      - /etc/jenkins/secrets/ry-env:/etc/jenkins/secrets/ry-env
      - /var/run/docker.sock:/var/run/docker.sock
      # 按需取消注释
      # - /etc/ansible/hosts:/etc/ansible/hosts:ro
      # - ~/.ssh/id_rsa:/root/.ssh/id_rsa
      # - ~/.ssh/known_hosts:/root/.ssh/known_hosts:ro
    environment:
      # 确保使用正确的PATH
      # 华为云区域设置
      TZ: "Asia/Shanghai"
      DOCKER_HOST: "unix:///var/run/docker.sock"
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 1G

volumes:
  jenkins-data:

启动Jenkins

docker compose up -d

#登录密码在日志中查看
docker compose logs -f

#登录成功后安装对应插件: Gitee、Github等

2.创建流水线任务

在这里插入图片描述

配置仓库地址等内容

在这里插入图片描述

  • 准备文件Jenkinsfile 等文件, 并push到你的Gitee/Github

  • 本文测试代码获取: rytest - Gitee.com

    • 注意此测试用的分支是huawei
    • git clone -b huawei https://gitee.com/xbd_zc/rytest.git
  • 准备.env文件

    # 创建安全目录
    sudo mkdir -p /etc/jenkins/secrets
    sudo nano /etc/jenkins/secrets/ry-env
    
    # 数据库配置
    MYSQL_ROOT_PASSWORD=ry$1234
    MYSQL_DATABASE=ry
    MYSQL_USER=xbdzc
    MYSQL_PASSWORD=123456
    
    # Tomcat 连接配置
    MYSQL_HOST=ry-mysql
    DB_USER=xbdzc
    DB_PASSWORD=123456
    
    
  • Jenkinsfile

pipeline {
    agent any
    
    environment {
        PROJECT_DIR = "${WORKSPACE}"
        WAR_FILE = "tomcat9/war/ruoyi-admin-docker.war"
    }
    stages {
		stage('准备环境') {
			steps {
				// 从安全存储位置复制.env
				sh 'cp /etc/jenkins/secrets/ry-env .env'
				
				// 设置严格权限
				sh 'chmod 600 .env'
			}
		}
		
		stage('准备应用') {
			steps {
				// 清空部署目录
				sh 'rm -rf tomcat9/new-app/*'
				
				// 解压WAR到部署目录
				sh "unzip -q ${WAR_FILE} -d tomcat9/new-app/"
				
			}
		}
		
		stage('部署更新') {
			steps {
				dir(PROJECT_DIR) {
					// 滚动更新Tomcat
					sh 'docker compose build && docker compose up -d'
					
					// 健康检查
					timeout(time: 1, unit: 'MINUTES') {
						waitUntil {
							script {  // Wrap Groovy code in a script block
								def status = sh(
									script: "curl -sI -o /dev/null -w '%{http_code}' http://localhost:8080/login",
									returnStdout: true
								).trim()
								echo "Health check status: ${status}"
								status == "200"  // Last expression is the return value
							}
						}
					}
				}
			}
		}
	}
}

2、Gitee 配置

1. Gitee 访问令牌创建
  1. 登录 Gitee → 设置 → 私人令牌 - Gitee.com
  2. 创建 Token:
    • 权限:projectspull_requests
    • 备注:Jenkins自动部署
  3. jenkins设置 →全局凭据 (unrestricted) →添加「添加凭据」,Gitee API令牌
    • ID:(建议使用有意义的ID)
  4. 安装Gitee插件
    • Go to Manage Jenkins -> Manage Plugins -> Available
    • 转到“管理 Jenkins” -> “管理插件” -> “可用插件”
    • 正确筛选条件输入:Gitee
    • 在下面的可选列表中勾选 Gitee 安装
  5. 系统配置 →Gitee 配置 (测试通过)

在这里插入图片描述

2. Jenkins 项目配置
  • Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://xxx:8080/gitee-project/test(test是项目名)
  • Gitee WebHook 密码 待会复制到Gitee WebHook 密码

在这里插入图片描述

在这里插入图片描述

3. Gitee Webhook 配置
  1. 仓库 → 管理 → WebHooks → 添加WebHook

  2. 参数设置:

    URL: http://<你的Jenkins域名>/gitee-project/xx
    Gitee WebHook密码:  jenkins上的 WebHook密码一致
    触发事件: Push事件
    

    在这里插入图片描述

4.推送测试

git push

自动触发构建

在这里插入图片描述

3、GitHub 配置

1. 创建GitHub 登录密码凭据

jenkins设置 →全局凭据 (unrestricted) →添加「添加凭据」,

  • 类型 : Username with password
  • 用户名: zhangsan 如仓库地址: https://github.com/zhangsan/xxx.git
  • 密码: Github登录密码
2.jenkins设置hook url

系统管理–>系统配置–>Github

  • 复制此地址
  • 共享 Secret (可选)

在这里插入图片描述

3. GitHub Webhook 配置
  1. 仓库 → Settings → Webhooks → Add webhook
  2. 参数设置:
    • URL: 复制系统设置中的Github Hook URL
    • Secret (可选) : 与设置中保持一致

在这里插入图片描述

4.jenkins项目设置
  • 勾选GitHub hook trigger for GITScm polling

在这里插入图片描述

5.测试Webhook

点击Redeliver 查看请求发送情况

在这里插入图片描述

或者手动git push 自动触发构建

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到