Jenkins构建平台的运维

    Jenkins常见的应用场景是:

    • 项目的自动构建(编译),即持续集成
    • 自动执行项目的单元/集成测试,即持续测试
    • 实现项目的自动部署、上线,即持续部署

    在本小节,我们首先探讨Jenkins系统的运维工作,并尝试将Jenkins与LDAP系统集成起来。

    对于Jenkins系统,我们将直接用Docker部署在物理机而不是k8s集群上,主要原因有:

    • Jenkins的定位是持续集成、持续部署,需要作用在k8s集群上,故耦合不宜太紧密。
    • 由于资源有限,我们的k8s集群主要运行微服务及相关后台组件。

    我们先来看一下创建脚本

    如上所述:

    • 我们使用了jenkins的官方镜像
    • 映射默认端口到本地的9001,这个即web管理界面的端口
    • 映射端口50000,这个是用于管理通信的端口
    • volume映射了/var/jenkins_home文件夹

    启动完毕后,需要进行Jenkins系统的初始化,如下图所示:

    初始化需要输入初始化密码,存放在docker的/var/jenkins_home/secrets/initialAdminPassword目录下,可以通过docker exec -i -t 登录容器,然后cat查看。

    输入密码后,稍等一会儿,提示选择安装插件的模式,选择自定义插件:

    Jenkins插件选项初始化

    • Build Features
      • Build Timeout
      • SSH Agent
      • Timestamper
      • Workspace Cleanup
      • Active Choice
    • Build Tools
      • Gradle
    • Pipelines and Continuous Delivery
      • Pipeline
      • Pipeline: Stage View
    • Source Code Management
      • Git
    • Distributed Builds
      • SSH Slaves
    • Notifications and Publishing
      • Publish Over SSH
      • SSH

    选择好后进行安装,这一步会耗费的久一些,随后需要创建管理员帐号:

    最后点击完成

    经过上述配置后,我们已经构建了基本的Jenkins环境,并有了一个可以登录的系统管理员帐号。

    作为持续集成的核心,Jenkins系统的重要性毋庸置疑,有必要进行细粒度的权限控制与管理,例如:

    • 开发用户可以修改、执行Job,但不能新建项目
    • 测试用户只能运行Job
    • 管理员可以进行任何操作

    因此,我们需要给每个团队成员配置独立的帐号。面对这种需求,接入LDAP验证是一个很好的选择。

    LDAP 内部账号管理系统一节中,我们介绍了LDAP的运维方案,本节假设你已经部署好了LDAP服务。

    登录Jenkins后,在左侧菜单选择”Manage Jenkins”,随后选择”Configure Global Security”

    在”Access Control”中选中”LDAP”,填写如下信息:

    • Server: LDAP服务和端口号,例如 ldap.coder4.com:389
    • Root DN: LDAP的根目录,例如 dc=coder4,dc=com
    • User search base: 用户所在的子目录,例如 ou=users
    • User search filter: 用户名的字段,例如cn={0}
    • Manager DN: 可查询LDAP的额外帐号,例如一个只读帐号 cn=guest,dc=coder4,dc=com
    • Manager Password: 上述帐号对应的密码
    • Display Name LDAP attribute: 帐号名字段名,例如cn
    • Email Address LDAP attribute: 邮箱字段名,例如mailk

    上述都填写完毕后,可以点击底部的Test LDAP Settings

    随后,我们尝试用LDAP帐号登录,可以发现登录成功。

    团队成员有多种不同的角色,如前面提到的开发、测试、管理员。

    在Jeknins中,可以设置不同的角色,并针对角色配置不同的权限。

    点击”Manage Jenkins”,然后选择”Configure Global Security”,在”Authorization”中更改为”Role Based Strategy”。

    不要退出Jenkins,选择”Manage and Assign Roles”,首先管理角色”Manage and Assign Roles”

    Jenkins分配系统角色

    如上图所示,新增2个角色:开发rd和测试qa,并设置对应的权限。

    随后进入”Assign Roles”,将开发帐号赋给对应的角色,这里给lihy赋予admin角色、给zhangsan赋予rd角色,如图所示:

    我们可以登录zhangsan,没有看到”Manage Jenkins”的菜单,角色配置成功。