需求背景
王总和小张的对话
王总:
小张,最近测试人员老是抱怨说我们开发好的需求都不发到测试给他们测试,说什么等到几个需求开发好了再一起发布上去,他们总是忙一阵闲一阵工作强度很不均匀,这是怎么回事啊?
小张:
领导好,原因是我们最近不是搞了微服务化嘛,将之前一个应用拆分了6个应用外加组件一共差不多10个应用,一般需求改动至少涉及到3-6个应用的发布,非常繁琐。所以我们现在通过合并需求发布的方式减少发布次数。另外,我最近也在研究自动化发布这一块,后续会通过引入自动化发布工具来解决这个问题。
王总:好的,辛苦你了,最好这个礼拜解决这个痛点哈。
需求分析
登录某个自动化发布应用,实现下面功能:
1、一键发布某个分支
2、需要实现不同项目之间权限隔离
3、需要实现同一个项目不同环境之间的权限隔离
4、必要时需要实现定时自动发布
tips:公司使用Git作为源码管理工具,使用ssh协议
技术选型
小张经过几番调研,最后决定选择jenkins作为自动化发布工具
开始搭建
下载安装
1、登录jenkins官网
https://jenkins.io/
2、点击下载(Download),进入后可以根据系统选择安装包,也可以之间下载通用的war包,这里笔者选择Generic Java package选项。注意这种方式下载的是最新发布版本。也可以进入版本列表进行选择性下载。
3、准备好具备以下要求的linux服务器
至少256MB的RAM,推荐超过512MB
10GB磁盘空间
安装好jdk8
下载好tomcat8(非必须)
安装好git(公司使用gitlab做源码管理)
安装好maven(公司使用maven管理项目)
4、将war包上传到服务器,并安装tomcat,将war放到tomcat的webapps目录下,然后启动tomcat。jenkins war包内包含jetty容器,也可以不用安装tomcat容器进行启动,直接:
java -jar jenkins.war --httpPort=8088
不管用什么servlet容器,总之目的就是把jenkins跑起来。
5、查看$TOMCAT_HOME/logs/catalina.out,找到jenkins初始密码
6、浏览器访问jenkins
http://node1:8080/jenkins
tips: 如果浏览器无法访问,请检查防火墙。另外笔者没有改tomcat端口,默认8080,node1是笔者在本地windows的hosts文件配置了服务器dns本地映射。
7、选择安装推荐的插件
强烈建议选择推荐插件进行安装。
8、进入安装插件页面
可能会失败几次,重试安装几次就好了!
9、创建账号
安装插件完成后,下一个页面是创建管理员表单,这里你可以创建一个管理员,也可以点击下面以admin账号进入链接继续以admin账号进入jenkins。笔者跳过创建表单,选择以admin账号进入jenkins;
修改admin密码
admin账号使用的是初始化的密码,那个密码太长太难记,建议修改它,修改步骤如下:
1、系统管理
2、管理用户
3、设置
4、修改密码
5、保存
如果保存失败,多保存几次。jenkins有时会出现失败情况。修改好密码后注销重新登录测试是否OK;
至此,jenkins基础搭建完毕!
搭建前期工作全局工具配置
基础配置包含jdk、maven、mavensettings、git等配置,配置方式如下:
系统管理 > 全局工具配置
插件配置
系统管理 > 插件管理 > 可选插件
除了启动时安装的推荐插件外,另外我们需要自行安装以下插件:
1、以及角色控制权限插件:Role-based Authorization Strategy
2、git参数配置插件(可以选择分支进行构建):Git Parameter Plug-In
3、插件maven风格项目插件:Maven Integration plugin
tips:页面可以通过ctrl + f进行关键字搜索,选择好了之后点击直接安装。
创建项目
我们计划创建两个项目,分别是projectA和projectB,创建步骤如下:
新建任务
这里选择文件夹,它是一个可以嵌套存储的容器。利用它可以进行分组并且做项目权限隔离。
创建完成后首页列表如下:
进入项目为每个项目创建两个maven子项目(hello-world)。
创建账号
我们计划不同项目不用账号,我们有两个项目,所有创建两个账号,分别是lazy1和lazy2。创建步骤如下:
系统管理 > 管理用户 > 新建用户
创建完成后用户列表如下:
创建角色
我们签名安装了Role-based Authorization Strategy插件,所有下载jenkins支持基于角色控制权限,我们有两个项目,两个账号,再分别创建两个角色,时两个角色拥有不同的项目权限,目前计划如下:
账号 |
角色 |
项目 |
lazy1 |
projectA |
projectA |
lazy2 |
projectB |
projectB |
下面开始创建角色
1、修改安全配置策略
系统管理 > 全局安全配置
创建角色
系统管理 > Manage and Assign Roles > Manager Roles
安装上面我们的计划,需要创建两个角色,分别是projectA和projectB,其中projectA只能操作projectA项目下的所有任务projectB只能操作projectB项目下的所有任务。另外还有basic角色,这个角色所有账号都要关联它,不然登录jenkins什么都看不到的。下面简单讲解下上面角色Pattern配置意义。
1、^projectB/.* 表示可以对projectB项目下所有项目/任务生效(比如运行子项目,但不能创建子项目)
2、projectB-.* 表示对projectB-开头的所有项目/任务生效。区分大小写
3、projectB.* 表示对projectB项目生效(比如创建子项目,运行子项目)
更多关于角色正则权限配置方式可以参考插件文档:
https://plugins.jenkins.io/role-strategy
分配角色
系统管理 > Manage and Assign Roles > Assign Roles
分配好角色之后,我们用账号lazy1登录后查看列表如下:
点击projectA项目进去后,列表如下:
点击projectB项目进去后,列表如下:
可以看到我们配置的权限控制确实生效了。但是笔者这里有个疑问,就是lazy1账号配置的是projectA项目,为啥还能看到projectB项目(虽然没有操作它下面项目的权限),这里笔者尝试了配置很多次,均没有效果。如果有其它读者知道如何解决这个问题的话,可以给我留言,感激不尽。
开始搭建配置ssh信息
1、通过ssh-keygen命令在jenkins服务器生成ssh公钥对(如果有就不用再次生成)
2、复制/root/.ssh/id_rsa内容
3、选择凭据
4、创建全局凭据
5、github或gitlab上创建ssh公钥
创建maven项目
1、点击进入projectA
2、新建item
3、输入名称后确定
4、进入后配置git参数化构建(git parameter插件)
5、下一步:
6、下一步:
7、下一步:
8、下一步:
9、下一步:
至此,搭建完成!