基于 OpenClaw + Claude Code 的端到端研发自动化系统
自动从 Git 拉取代码,触发构建和测试,及时发现和修复问题,提高代码质量。
将构建好的软件自动部署到测试或生产环境,实现快速迭代和发布。
丰富的插件生态系统,与 Docker、Kubernetes、SonarQube 等工具无缝集成。
直观的 Web 界面,方便配置和管理构建任务,支持可视化 Pipeline 编辑。
支持 Linux、Windows、macOS 等多种操作系统,灵活部署。
中间研发节点支持人工审批和干预,确保关键操作的安全性。
| 组件 | 版本 | 用途 | 端口 |
|---|---|---|---|
| Jenkins | 2.440+ | CI/CD 引擎 | 8080 |
| Git/GitLab | 2.40+ | 版本控制 | 80/443 |
| Docker | 24.0+ | 容器运行时 | 2375/2376 |
| Kubernetes | 1.28+ | 容器编排 | 6443 |
| KubeSphere | 3.4+ | K8s 管理平台 | 30880 |
| SonarQube | 10.3+ | 代码质量分析 | 9000 |
| JDK | 17+ | Java 运行环境 | - |
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y curl wget git vim net-tools unzip \
apt-transport-https ca-certificates gnupg lsb-release
# 优化内核参数
cat > /etc/sysctl.d/99-kubernetes.conf << EOF
vm.max_map_count = 262144
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288
EOF
sysctl --system
# 添加 Adoptium 仓库
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | \
sudo gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] \
https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/adoptium.list
# 安装 JDK
sudo apt update
sudo apt install -y temurin-17-jdk
# 验证安装
java -version
# 添加 Jenkins 仓库
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | \
sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/" | \
sudo tee /etc/apt/sources.list.d/jenkins.list
# 安装 Jenkins
sudo apt update
sudo apt install -y jenkins
# 启动服务
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
# 查看初始密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
http://your-server:8080# 安装 Git
sudo apt install -y git
# 配置 Git 用户信息
git config --global user.name "Jenkins CI"
git config --global user.email "jenkins@company.com"
# 验证安装
git --version
# 生成 SSH 密钥对
ssh-keygen -t rsa -b 4096 -C "jenkins@company.com" -f ~/.ssh/id_rsa_jenkins
# 查看公钥
cat ~/.ssh/id_rsa_jenkins.pub
# 将公钥添加到 GitLab/GitHub 的 SSH Keys 设置中
git-ssh-credentials
# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
# 将 Jenkins 用户添加到 docker 组
sudo usermod -aG docker jenkins
newgrp docker 使组权限生效
kubectl apply -f - << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins-admin
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: default
EOF
# 获取 Token
kubectl get secret $(kubectl get serviceaccount jenkins-admin \
-o jsonpath="{.secrets[0].name}") \
-o jsonpath="{.data.token}" | base64 --decode
# 使用 Docker Compose 部署
mkdir -p /opt/sonarqube/{data,extensions,logs}
cd /opt/sonarqube
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
sonarqube:
image: sonarqube:10.3-community
container_name: sonarqube
ports:
- "9000:9000"
environment:
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar123
SONAR_JDBC_URL: jdbc:postgresql://sonar-db:5432/sonar
volumes:
- ./data:/opt/sonarqube/data
- ./extensions:/opt/sonarqube/extensions
- ./logs:/opt/sonarqube/logs
depends_on:
- sonar-db
sonar-db:
image: postgres:15
container_name: sonar-postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar123
POSTGRES_DB: sonar
volumes:
- postgresql-data:/var/lib/postgresql/data
EOF
docker compose up -d
pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.9-eclipse-temurin-17
- name: docker
image: docker:24-dind
securityContext:
privileged: true
'''
}
}
environment {
DOCKER_REGISTRY = 'registry.company.com'
IMAGE_NAME = 'myapp'
SONAR_HOST_URL = 'http://sonarqube:9000'
}
stages {
stage('Checkout') {
steps { checkout scm }
}
stage('Code Quality') {
steps {
withSonarQubeEnv('sonarqube-server') {
sh 'mvn clean verify sonar:sonar'
}
}
}
stage('Quality Gate') {
steps {
timeout(time: 1, unit: 'HOURS') {
waitForQualityGate abortPipeline: true
}
}
}
stage('Build') {
steps { sh 'mvn package' }
}
stage('Build Docker Image') {
steps {
script {
docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}")
}
}
}
stage('Push Image') {
steps {
script {
docker.withRegistry("https://${DOCKER_REGISTRY}", 'docker-credentials') {
docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}").push()
}
}
}
}
stage('Deploy to Dev') {
steps {
sh '''
kubectl set image deployment/myapp-dev \
myapp=${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}
'''
}
}
stage('Approval') {
steps {
input message: 'Deploy to production?', ok: 'Approve'
}
}
stage('Deploy to Prod') {
steps {
sh '''
kubectl set image deployment/myapp-prod \
myapp=${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}
'''
}
}
}
}
sudo journalctl -u jenkins -fdocker logs <container-id>kubectl logs <pod-name> -n <namespace>| 文件名 | 类型 | 描述 |
|---|---|---|
jenkins_deployment_architecture.md |
Markdown | 系统架构设计文档 |
jenkins_deployment_guide.html |
HTML | 可视化部署指南 |
scripts/install_jenkins.sh |
Bash | Jenkins 自动化安装脚本 |
scripts/install_docker.sh |
Bash | Docker 自动化安装脚本 |
scripts/install_sonarqube.sh |
Bash | SonarQube 部署脚本 |
scripts/install_kubernetes.sh |
Bash | Kubernetes 集群安装脚本 |
configs/Jenkinsfile |
Groovy | 完整 CI/CD Pipeline 定义 |
configs/jenkins-kubernetes-deployment.yaml |
YAML | Kubernetes 部署配置 |
configs/docker-compose-cicd.yaml |
YAML | Docker Compose 一键部署 |