Jenkins创建CI/CD流水线教程

使用Jenkins创建CI/CD流水线可以自动化代码的构建、测试和部署。以下是分步指南:


1. 安装Jenkins

  • 系统要求:确保服务器满足Java环境(JDK 8或11)。
  • 安装方法
    • Ubuntu/Debian
      1
      2
      3
      4
      wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
      sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
      sudo apt update
      sudo apt install jenkins
    • CentOS/RHEL
      1
      2
      3
      sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
      sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
      sudo yum install jenkins
  • 启动服务
    1
    2
    sudo systemctl start jenkins
    sudo systemctl enable jenkins

2. 初始化配置

  1. 访问 http://<服务器IP>:8080,输入初始管理员密码(路径在 /var/lib/jenkins/secrets/initialAdminPassword)。
  2. 安装推荐插件(如Git、Pipeline、Maven等)。
  3. 创建管理员账户。

3. 安装必要插件

进入 Manage Jenkins > Manage Plugins,安装以下插件(可选):

  • Git:代码仓库管理
  • Pipeline:定义流水线
  • Docker:容器化构建
  • Kubernetes:部署到K8s集群
  • SonarQube Scanner:代码质量检查

4. 配置全局工具

进入 Manage Jenkins > Global Tool Configuration,设置:

  • JDK:指定JAVA_HOME路径或自动安装。
  • Git:配置可执行文件路径(默认 /usr/bin/git)。
  • Maven/Gradle:配置构建工具路径。

5. 创建流水线项目

  1. 新建任务 > 输入任务名称,选择 Pipeline
  2. 配置流水线
    • Pipeline脚本来源:选择 Pipeline script from SCM
    • SCM:选择Git,填写仓库URL和凭证(需提前在凭据管理中配置SSH密钥或账号密码)。
    • 脚本路径:指定仓库中的 Jenkinsfile(默认为根目录)。

6. 编写Jenkinsfile

在代码仓库根目录创建 Jenkinsfile,定义流水线阶段。示例(声明式语法):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
pipeline {
agent any
stages {
// 拉取代码(通常由SCM自动完成)
stage('Checkout') {
steps {
checkout scm
}
}

// 编译构建
stage('Build') {
steps {
sh 'mvn clean package'
}
}

// 单元测试
stage('Test') {
steps {
sh 'mvn test'
}
}

// 代码质量检查(需配置SonarQube)
stage('SonarQube Analysis') {
steps {
withSonarQubeEnv('sonar-server') {
sh 'mvn sonar:sonar'
}
}
}

// 构建Docker镜像
stage('Docker Build') {
steps {
script {
docker.build("my-app:${env.BUILD_ID}")
}
}
}

// 部署到测试环境(示例:Kubernetes)
stage('Deploy to Test') {
steps {
sh 'kubectl apply -f k8s/test-deployment.yaml'
}
}

// 自动化测试(示例:运行集成测试)
stage('Integration Test') {
steps {
sh 'npm run integration-test'
}
}

// 部署到生产环境(需审批)
stage('Deploy to Prod') {
steps {
input '确认部署到生产环境?'
sh 'kubectl apply -f k8s/prod-deployment.yaml'
}
}
}
post {
success {
slackSend channel: '#devops', message: '构建成功!'
}
failure {
slackSend channel: '#devops', message: '构建失败!'
}
}
}

7. 配置触发器

  • 定时触发:在流水线配置中设置 Poll SCM(如 H/5 * * * * 每5分钟检查一次变更)。
  • Webhook触发(推荐):
    1. 在Git仓库(如GitHub)中配置Webhook,URL为 http://<Jenkins地址>/github-webhook/
      2 Jenkins中安装 GitHub插件,并在流水线配置选择 GitHub hook trigger

8. 处理敏感信息

  • 凭据管理:在 Manage Jenkins > Manage Credentials 中添加Docker Hub密码、K8s kubeconfig等。
  • 在流水线中使用凭据
    1
    2
    3
    4
    5
    6
    7
    8
    stage('Push to Docker Hub') {
    steps {
    withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
    sh 'docker login -u $USER -p $PASS'
    sh 'docker push my-app:${env.BUILD_ID}'
    }
    }
    }

9. 常见问题解决

  • 权限问题:确保Jenkins用户有权限执行Docker命令(将用户加入 docker 组)。
  • 网络问题:检查防火墙设置,确保能访问Git仓库、镜像仓库和K8s集群。
  • 构建失败:查看控制台日志,排查命令错误或依赖缺失。

10. 优化实践

  • 并行执行:使用 parallel 阶段加速测试或构建。
  • 分布式构建:添加Jenkins Agent分担主节点压力。
  • 蓝绿部署:通过脚本实现零停机更新。
  • 流水线模板:使用共享库(Shared Libraries)复用通用逻辑。

通过以上步骤,你可以快速搭建一个自动化CI/CD流水线,实现从代码提交到生产部署的全流程自动化。根据项目需求调整各阶段工具(如替换Maven为Gradle、使用Helm部署到K8s等)。