docker+jenkins+ldap+rbac集成方案

593 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、jenkins简介

  Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant。

2、jenkins的部署

2.1、jenkins部署逻辑架构

  下图部署逻辑架构图中,采用基于docker容器一主多从分布式部署方式,图中只画出一个slave1来表示,实际情况按需扩展slave来解决资源不足问题。另外对于使用到的构建和打包工具使用动态的方式来拉起docker容器,构建完成后即释放相应的容器资源。

image.png图1、部署逻辑架构

2.2、基于docker容器化的jenkins部署

2.2.1、master部署

  使用docker来启动社区版的blueocean版jenkins,将jenkins_home挂载到本地来持久化数据。将/var/run/docker.sock挂载到容器内,方便实现docker-in-docker的方式启动一些构建工具。

mkdir -p /home/jenkins-data
docker run \
  --name jenkins-master \
  -u root \
  --restart=always \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /home/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

2.2.2、slave部署

  使用静态添加的方式,在jenkins web界面节点管理添加固定节点。

image.png图2、新增slave节点

image.png图3、slave秘钥

  根据生成的秘钥来启动slave节点连接master。

mkdir -p /home/jenkins-data

docker run -dit -u root \
-v /home/jenkins-data:/home/jenkins-data \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
--name slave2\
--init jenkins/inbound-agent \
-url http://192.168.103.43:8080 \
-workDir=/home/jenkins-data a51724e529b4ac21ab16f1a4a023d474820118afd3aab999a0fcaf7cbaeae58f slave2

2.2.3、部署效果

  一共部署了1个master,2个slave节点。

image.png图4、部署效果

3、jenkins构建maven程序

3.1、pipeline配置

  构建maven项目的pipeline,agent指定在带有标签master的节点上面进行构建,states里面定义构建的每个阶段的具体的步骤。这里面使用docker来集成构建工具,reuseNode true表示重复用当前的代理节点,保持和上面声明的节点一致,防止在其他节点进行构建。

pipeline {
    agent {
        node {
            label "master"
        }   
    }
    stages {
        stage('Build') {  
            agent{
                docker {
                    image 'maven:3.8.6-jdk-8' 
                    args '-v /home/maven-data/.m2:/root/.m2' 
                    reuseNode true
                }
            }
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

3.2、构建的步骤

3.2.1、配置token

  配置gitlab项目token方便jenkins拉取代码。

image.png图5、配置token

  jenkins配置gitlab的凭证。

image.png图6、凭证配置

3.2.2、创建流水线

  在jenkins中创建流水线任务。

image.png图7、创建任务

  配置从git服务器上面拉取代码。

image.png图8、拉取源码和jenkinsfile

  构建流水线。

image.png图9、任务

image.png图10、构建情况

4、jenkins构建nodejs程序

  nodejs项目的构建和maven项目构建相似,依旧使用容器来运行构建工具,在此仅给出pipeline,具体的步骤就不在熬述。

  nodejs项目pipeline。

pipeline {
    agent {
        node {
            label "master"
        }   
    }
    stages {
        stage('Build') {  
            agent{
                docker {
                    image 'node:18.9.0-alpine'
                    args '-p 3000:3000'
                    reuseNode true
                }
            }
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
    }
}

5、jenkins接入LDAP进行权限和认证管理

  新版本的jenkins可以配置用户,但在权限管理方面需要借助一些额外的RBAC权限插件。LDAP是一个统一认证管理的工具,比较老,但是比较好用。多种类型的工具都可以接入,比如nexus、gitlab、jenkins。这些工具都可以接入ldap来统一管理用户。

5.1、ldap的配置

  ldap的安装部署不在此讨论,如有需要后续补充,此处ldap中设置了两个分组jenkins-admin、jenkins-user以及几个测试用户。

image.png图11、ldap配置

5.2、jenkins接入ldap的配置

  需要jenkins安装好ldap插件。

image.png图12、jenkins截图配置

5.3、rbac的权限控制

  为了达到更细粒度的权限控制,可以安装rbac插件来进行权限规划和分配。

image.png图13、rbac权限设置

image.png图14、角色管理

image.png图15、角色分配