持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)

2021/12/21 23:24:28

本文主要是介绍持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 一、jenkins节点管理
  • 二、jenkins用户管理
  • 三、jenkins结合ansible部署apache
    • 1.环境配置
    • 2.部署

一、jenkins节点管理

实际中,我们不可能直接用jenkins的matser节点工作,master只负责调度。因此我们创建server4作为jenkins的agent节点,来进行工作。

server4安装jdk(jenkins是用Java开发的)和git(有的数据是用git拉取的)
在这里插入图片描述
jenkins安装ssh agent插件
在这里插入图片描述
进入系统管理,节点管理
在这里插入图片描述
选择新建节点,固定节点属性
在这里插入图片描述
添加agent节点的信息,启动方式为ssh,为SSH添加证书,选择不校验,尽量保持代理在线
在这里插入图片描述
在这里插入图片描述
为master节点配置从节点,并把master节点的数量变为0,master只负责调度
在这里插入图片描述
在这里插入图片描述
回到Dashboard,点击demo进行手动触发,查看控制台输出可以看到成功构建(提前确保仓库运行正常)
在这里插入图片描述
但是docker项目执行报错,这是因为已经调度到了server4上,不能再通过ssh的方式,已经在本机上了,会发生冲突;
因此,配置docker项目,把ssh shell关闭,用shell即可
在这里插入图片描述
再次触发docker ,查看控制台成功构建
在这里插入图片描述
server4查看正在运行的容器可以看到demo正常运行,测试访问正常
在这里插入图片描述

二、jenkins用户管理

接下来对普通用户的权限进行一定的限制,点击系统管理,选择管理用户
在这里插入图片描述
选择新建用户,填写注册信息
在这里插入图片描述
使用刚才创建的用户进行登录
在这里插入图片描述
可以看到,默认情况下新建的用户具有所有权限,可以进行全部操作,这显然不合适在这里插入图片描述
我们需要将其改为普通权限用户,使用管理员账户登录,安装基于角色的访问控制插件
在这里插入图片描述
在系统管理中选择全局安全配置
在这里插入图片描述
从原来的登陆用户可以做任何事改为基于角色的控制
在这里插入图片描述
然后就会出现基于角色控制的模块
在这里插入图片描述
管理角色
在这里插入图片描述
添加全局角色,users,权限只有读
在这里插入图片描述
添加项目角色demo,赋予其查看凭据,以及任务和运行的相关操作,对所有以demo开头(westos .*)的项目都生效
在这里插入图片描述
点击角色分配
在这里插入图片描述
为刚才创建的lr用户分配users全局角色和demo项目角色
在这里插入图片描述
现在再使用lr这个用户进行登录,无法修改配置了,且看不到docker项目了,只能看到demo项目
在这里插入图片描述
切回root用户,创建一个demo01项目
在这里插入图片描述
创建成功
在这里插入图片描述
现在切到lr用户,demo开头的项目都可以管理,也可以删除demo01项目
在这里插入图片描述
删除完成,只剩下demo项目
在这里插入图片描述

三、jenkins结合ansible部署apache

1.环境配置

root用户登录,jenkins配置中将agent1节点断开连接
在这里插入图片描述
删除agent1节点
在这里插入图片描述
恢复master工作节点数量为2
在这里插入图片描述
为了净化环境,禁用了docker项目
在这里插入图片描述
真实主机再开启一个虚拟机server5,并在真实主机上为server5添加域名解析;
此时:
server2(172.25.36.6)为gitlab仓库;
server3(172.25.36.7)为jenkins,ansible主机;
server4/5(172.25.36.8/9)为ansible的受控节点。

2.部署

新建项目ansible
在这里插入图片描述
server3配置yum源,编辑ansible.repo文件
在这里插入图片描述
在这里插入图片描述
安装ansible
在这里插入图片描述
在gitlab新建playbook代码仓库,设为私有,使用自述文件初始化仓库
在这里插入图片描述
使用ssh克隆
在这里插入图片描述
server2克隆gitlab的项目playbook,可以看到克隆成功
在这里插入图片描述
框架如下
在这里插入图片描述
进入到playbook目录,编辑playbook.yaml配置文件,

[root@server6 playbook]# cat playbook.yaml 
---
- hosts: all							%所有主机执行下面命令
  tasks:
  - name: install apache				%安装apache
    yum:
      name: httpd
      state: present
  - name: configure apache				%配置apache
    template:							%使用jinjia模板
      src: httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf	%部署的位置
    notify: restart apache				%如果配置文件变更了,通知handlers
  - name: start apache			   		%开启apache
    service:
      name: httpd
      enabled: yes						%开机自启
      state: started
  handlers:								%如果受到通知,重启apache
  - name: restart apache
    service:
      name: httpd
      state: restarted

在playbook目录中创建inventory目录,inventory是ansible中的部署对象主机,即playbook.yaml中的hosts包含的对象。
在test文件中,写入server4节点和端口信息,用于测试。在prod文件中,写入server5节点和端口信息,用于部署。
在这里插入图片描述
在playbook目录下编辑ansible.cfg配置文件

[root@server6 playbook] cat ansible.cfg 	该ansible的配置文件会覆盖原本的路径下的配置文件
[defaults]
command_warnings=False
remote_user=devops

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

在这里插入图片描述
server4安装httpd服务(为了获得httpd.conf文件)
在这里插入图片描述
将httpd.conf文件发送给server2
在这里插入图片描述
server2将httpd.conf文件改名为httpd.conf.j2
在这里插入图片描述
编辑httpd.conf.j2文件,使用变量方式定义httpd的端口
在这里插入图片描述
server2使用git命令添加并提交上传playbook至gitlab
在这里插入图片描述
可以中gitlab页面看到项目,复制项目的克隆链接
在这里插入图片描述
回到jenkins,配置ansible项目,指定gitlab的URL,使用ssh证书,指定分支为master;
(只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数)
在这里插入图片描述
执行命令先简单写ls,创建
在这里插入图片描述
在ansible的控制台输出日志中可以看到执行正常
在这里插入图片描述
因为jenkens流水线执行时使用的是jenkens用户身份,ansible执行时使用的是devops用户,所以server3的jenkens用户要和server4/5的devops用户建立ssh连接免密登陆,现在为节点之间创建ssh免密。
server3切换到/var/lib/jenkins/workspace目录下,查看ansible.cfg文件详细信息
在这里插入图片描述
进入jenkens用户,查看密码
在这里插入图片描述
在这里插入图片描述
为jenkins创建交互式bash,进入jenkins,设置远端用户为devops
在这里插入图片描述
server4/5建立devops用户,设置密码(注意:两个devops的用户id要一致)
在这里插入图片描述
在这里插入图片描述
server3生成ssh密钥
在这里插入图片描述
server3的jenkens用户把ssh密钥给server4/5的devops用户各发一份
在这里插入图片描述
接下来,测试ssh登录,可以看到server3的jenkens用户可以免密登陆server4/5的devops用户
在这里插入图片描述
分别对server4/5的devops用户授权
在这里插入图片描述
在这里插入图片描述
回到jenkins页面ansible项目的配置,设定参数化构建,选项参数,即使用变量(变量名称为deploy,代表:prod或test)
在这里插入图片描述
编写执行shell:先切换到工作目录,根据playbook.yaml文件的配置,ansible会自动部署在inventory目录下的test或prod
在这里插入图片描述
首先选择在test上部署
在这里插入图片描述
控制台显示test上部署成功
在这里插入图片描述
server4查看端口状态,此时8080端口处于开放状态
在这里插入图片描述
现在使用prod参数构建项目
在这里插入图片描述
查看控制台输出日志,显示部署成功
在这里插入图片描述
在server5上查看端口状态,可以看到80端口开放
在这里插入图片描述



这篇关于持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程