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

目录

一、jenkins节点管理

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

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

二、jenkins用户管理

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

三、jenkins结合ansible部署apache

1.环境配置

root用户登录,jenkins配置中将agent1节点断开连接
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
删除agent1节点
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
恢复master工作节点数量为2
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
为了净化环境,禁用了docker项目
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
真实主机再开启一个虚拟机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
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
server3配置yum源,编辑ansible.repo文件
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
安装ansible
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
在gitlab新建playbook代码仓库,设为私有,使用自述文件初始化仓库
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
使用ssh克隆
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
server2克隆gitlab的项目playbook,可以看到克隆成功
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
框架如下
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
进入到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节点和端口信息,用于部署。
持续集成与持续交付 3(jenkins节点管理、用户管理、jenkins结合ansible)
在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

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

上一篇:MarkDown语法---(个人学习笔记)


下一篇:如何使用CMake构建c++项目