本文详细记录了在 Debian 12 系统上,从安装 Java 21、Jenkins、极狐GitLab(中文版),到配置 Webhook 并最终打通 Kubernetes 集群实现自动化部署的完整过程。

环境概览

组件

IP 地址

操作系统

Jenkins 服务器

192.168.102.237

Debian 12

极狐GitLab 服务器

192.168.102.238

Debian 12

K8s 控制节点

192.168.102.233

Debian 12

K8s Node 节点

192.168.102.231

Debian 12

第一部分:安装 Eclipse Temurin 21 (Java 21)

Eclipse Temurin(前身是 AdoptOpenJDK)是一个广泛使用的开源 JDK 发行版。Debian 12 官方源中默认不包含 Java 21,我们需要通过 Adoptium 的 APT 仓库来安装。

1.1 安装依赖包

sudo apt update

sudo apt install ca-certificates curl gpg -y

1.2 添加 Adoptium GPG 密钥

# 创建临时目录下载密钥

tmp_dir="$(mktemp -d)"

curl -fsSLo "$tmp_dir/adoptium.asc" https://packages.adoptium.net/artifactory/api/gpg/key/public

gpg --dearmor --yes -o "$tmp_dir/adoptium.gpg" "$tmp_dir/adoptium.asc"

sudo install -m 0644 "$tmp_dir/adoptium.gpg" /usr/share/keyrings/adoptium.gpg

rm -rf "$tmp_dir"

1.3 添加 Adoptium APT 软件源

echo 'Types: deb

URIs: https://packages.adoptium.net/artifactory/deb

Suites: bookworm

Components: main

Signed-By: /usr/share/keyrings/adoptium.gpg' | sudo tee /etc/apt/sources.list.d/adoptium.sources > /dev/null

*说明bookworm 是 Debian 12 的代号,请根据你的 Debian 版本调整

1.4 安装 Java 21

sudo apt update

sudo apt install temurin-21-jdk -y
预期输出类似:

第二部分:安装 Jenkins

2.1 添加 Jenkins 官方软件源

Jenkins 官方为 Debian/Ubuntu 提供了专门的软件源。我们使用 wget 下载并安装 GPG 密钥。

# 创建密钥存放目录

sudo mkdir -p /etc/apt/keyrings

# 下载 Jenkins GPG 密钥

sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \

https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key

# 添加 Jenkins APT 源

echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \

https://pkg.jenkins.io/debian-stable binary/ | sudo tee \

/etc/apt/sources.list.d/jenkins.list > /dev/null

2.2 安装 Jenkins

sudo apt update

sudo apt install jenkins -y

2.3 启动并设置开机自启

sudo systemctl start jenkins

sudo systemctl enable jenkins

sudo systemctl status jenkins # 检查运行状态

2.4 获取初始管理员密码

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

2.5 访问 Jenkins Web 界面

浏览器访问http://192.168.102.238:8080输入初始密码完成初始化向导。建议选择"安装推荐的插件"。

防火墙提醒:如果服务器开启了防火墙,需要放行 8080 端口。

sudo ufw allow 8080/tcp

第三部分:安装GitLab(中文版)

极狐GitLab(GitLab JH)是 GitLab 官方为中国用户提供的本地化版本,从界面到文档都做了完整的中文适配,服务器位于境内,访问速度更快。(主机内存不小于4G,最好是8G)

3.1 安装依赖包

sudo apt update

sudo apt install -y curl openssh-server ca-certificates tzdata perl

3.2 添加极狐GitLab 软件源

curl --location "https://packages.gitlab.cn/repository/raw/scripts/setup.sh" | sudo bash

3.3 安装极狐GitLab

sudo EXTERNAL_URL="http://192.168.102.238" apt install gitlab-jh -y

如果你的 80 端口已被占用,可以修改为其他端口:

sudo EXTERNAL_URL="http://192.168.102.238:8888" apt install gitlab-jh -y

3.4 重新配置并启动 GitLab

# 重新配置 GitLab(这个过程可能需要几分钟)

sudo gitlab-ctl reconfigure

# 查看服务状态

sudo gitlab-ctl status

# 获取初始 root 密码

sudo cat /etc/gitlab/initial_root_password
重要提示:这个密码文件会在 24 小时后自动删除,请务必在安装后尽快登录并修改密码。

3.5 访问极狐GitLab

浏览器访问 http://192.168.102.238,使用用户名 root 和初始密码登录,首次登录后记得修改密码。

第四部分:安装 Docker(配置国内镜像源)

Jenkins 需要使用 Docker 来构建应用镜像。我们使用阿里云镜像源进行安装,速度更快更稳定。

4.1 移除旧版本 Docker(如有)

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do

sudo apt-get remove $pkg -y 2>/dev/null

done

4.2 最简单的方法是利用社区提供的一键安装脚本,这类脚本通常会内置国内镜像源并自动处理配置。

你可以在Jenkins服务器(192.168.102.237)上执行以下命令:

使用阿里云镜像源安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

4.3 将 Jenkins 用户加入 Docker 组

这一步至关重要,否则 Jenkins 无法执行 Docker 命令:

sudo usermod -aG docker jenkins

sudo systemctl restart jenkins

4.4 验证 Docker 安装

sudo docker --version

# 预期输出

第五部分:Jenkins 插件安装与配置

5.1 安装必要插件

登录 Jenkins Web 界面,进入 Manage Jenkins > Manage Plugins > Available,搜索并安装以下插件:

插件名称

用途

GitLab Plugin

Jenkins 与 GitLab 通信

Git Plugin

拉取 Git 仓库代码

Pipeline Plugin

编写流水线脚本

Kubernetes CLI Plugin

执行 kubectl 命令

Docker Pipeline Plugin

Docker 集成(可选)

安装完成后,勾选 "Restart Jenkins when installation is complete" 重启 Jenkins。

5.2 生成极狐GitLab Personal Access Token

  • 登录极狐GitLab,点击右上角头像 > Preferences > Access Tokens

  • 输入 Token 名称(如 jenkins-token

  • 勾选权限:apiread_repositorywrite_repository

  • 点击 Create personal access token

  • 立即复制并保存生成的 Token(关闭页面后无法再次查看。

5.3 在 Jenkins 中配置极狐GitLab 连接

  1. 进入 Manage Jenkins > Credentials > System > Global credentials

  2. 点击 Add Credentials

    • Kind:选择 GitLab API token

    • API token:粘贴上一步生成的 Token

    • ID:填写 gitlab-token

  3. 进入 Manage Jenkins > Configure System,找到 GitLab 部分:

    • 点击 Add GitLab Server

    • Connection namegitlab

    • GitLab host URLhttp://192.168.102.238

    • Credentials:选择 gitlab-token

    • 点击 Test Connection,验证成功

5.4 配置 GitLab Webhook(允许本地网络)

极狐GitLab 默认禁止向本地 IP 发送 Webhook,需要修改设置:

  1. 登录极狐GitLab,点击右上角头像 > Admin(需要管理员权限)

  2. 左侧菜单进入 Settings > Network

  3. 展开 Outbound requests,勾选 "Allow requests to the local network from hooks and services"

  4. "Local IP addresses and domain names that hooks and services can access" 中输入 192.168.102.237

  5. 点击 Save changes

第六部分:创建 Jenkins Pipeline 任务

6.1 创建任务

  1. Jenkins 首页点击 New Item

  2. 输入任务名称(如 my-app-deploy

  3. 选择 Pipeline,点击 OK

6.2 配置 GitLab Webhook 触发器

  1. 在任务配置页面,找到 Build Triggers

  2. 勾选 "Build when a change is pushed to GitLab"

  3. 复制下方的 GitLab CI Service URL(类似 http://192.168.102.237:8080/project/my-app-deploy

  4. 点击 高级 (Advanced) 按钮展开更多选项

  5. 点击 Generate 生成 Secret token,复制并保存

6.3 在极狐GitLab 中配置 Webhook

  1. 进入你的项目仓库,点击 Settings > Webhooks

  2. URL:粘贴 Jenkins 的 Service URL

  3. Secret Token:粘贴 Jenkins 生成的 Secret token

  4. 勾选 Push events(也可按需勾选其他触发事件)

  5. 取消勾选 Enable SSL verification(内网环境)

  6. 点击 Add webhook

  7. 点击 Test > Push events,验证连通性,期望返回 HTTP 200

第七部分:配置 Kubernetes 集群访问凭证

7.1 获取 kubeconfig 文件

在 K8s 控制节点(192.168.102.233)上执行:

cat ~/.kube/config

复制输出的全部内容。

7.2 在 Jenkins 中添加 K8s 凭证

  1. 进入 Manage Jenkins > Credentials > Global credentials

  2. 点击 Add Credentials

    1. Kind:选择 Secret file

    2. File:上传 kubeconfig 文件,或在下方的 Secret 文本框中直接粘贴内容

    3. ID:填写 k8s-credential

    4. 点击 Create

第八部分:编写 Pipeline 脚本 (Jenkinsfile)

在项目根目录下创建 Jenkinsfile,以下是完整示例:

pipeline {

agent any

environment {

// ========== 请根据实际情况修改变量 ==========

// 镜像仓库地址(如 Docker Hub 或 Harbor)

IMAGE_REPO = 'your-registry.com/your-app'

// K8s 命名空间

K8S_NAMESPACE = 'default'

// GitLab 项目地址

GIT_URL = 'http://192.168.102.238/your-group/your-project.git'

// ===========================================

// 动态生成镜像标签:构建号 + Git Commit 短哈希

IMAGE_TAG = "${env.BUILD_NUMBER}-${sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()}"

}

stages {

stage('拉取代码') {

steps {

checkout scmGit(

branches: [[name: 'main']],

userRemoteConfigs: [[

url: GIT_URL,

credentialsId: 'git-credential' // 如需私有仓库,先配置 Git 凭证

]]

)

}

}

stage('代码审计与构建') {

steps {

// 根据项目类型选择构建命令

// Java/Maven 项目:

sh 'mvn clean package -DskipTests'

// Node.js 项目:

// sh 'npm install && npm run build'

// Python 项目:

// sh 'pip install -r requirements.txt'

}

}

stage('构建并推送镜像') {

steps {

sh """

docker build -t ${IMAGE_REPO}:${IMAGE_TAG} .

docker push ${IMAGE_REPO}:${IMAGE_TAG}

"""

}

}

stage('部署到 Kubernetes') {

steps {

withKubeConfig([credentialsId: 'k8s-credential']) {

sh """

kubectl set image deployment/your-app \

your-app=${IMAGE_REPO}:${IMAGE_TAG} \

-n ${K8S_NAMESPACE}

kubectl rollout status deployment/your-app \

-n ${K8S_NAMESPACE} --timeout=5m

"""

}

}

}

}

post {

success {

echo "✅ 部署成功!镜像: ${IMAGE_REPO}:${IMAGE_TAG}"

}

failure {

echo "❌ 部署失败,请检查日志"

}

}

}

关于 Git 凭证的补充说明

如果你的 GitLab 项目是私有的,需要在 Jenkins 中添加 Git 凭证:

  1. 进入 Manage Jenkins > Credentials > Global credentials

  2. 点击 Add Credentials

    • Kind:选择 Username with password

    • Username:你的 GitLab 用户名

    • Password:你的 GitLab 密码或 Personal Access Token

    • ID:填写 git-credential

  3. Jenkinsfile 中引用该凭证 ID

第九部分:最终验证与测试

9.1 提交代码触发构建

git add .

git commit -m "feat: 初始化 CI/CD 流水线"

git push origin main

9.2 监控 Jenkins 构建

  1. 登录 Jenkins,进入任务页面

  2. 点击 Last Build 查看实时日志

  3. 观察每个 Stage 的执行状态

9.3 验证 K8s 部署

在 K8s 控制节点上执行:

kubectl get pods -n default

kubectl get deployment -n default

常见问题排查

问题现象

可能原因

解决方案

Webhook 返回 403

GitLab 禁止本地网络请求

在 Admin > Settings > Network 中开启本地请求

Jenkins 无法执行 docker 命令

Jenkins 用户不在 docker 组

sudo usermod -aG docker jenkins && sudo systemctl restart jenkins

K8s 部署返回 403

kubeconfig 权限不足

检查 K8s 服务账号的 RBAC 权限

镜像推送失败

未登录镜像仓库

在 Jenkins 中配置镜像仓库凭证

构建时提示命令不存在

缺少构建工具

安装 maven/npm/python 等对应工具

参考链接

Jenkins 官方文档

0%