Linux企业运维——持续集成与持续交付(下)jenkins节点与用户管理、jenkins结合ansible
文章目录
一、jenkins节点管理
实际工作中master节点只负责调度,需要创建agent节点进行工作,本文创建server4作为agent节点进行工作
server1进入harbor仓库下,查看运行的容器
server3将jdk发送给server4
server4安装jdk和git
jenkins安装SSH Build Agents插件
进入节点管理界面
选择新建节点,选择固定节点属性
编辑agent节点的信息,执行器设为5,远程工作目录在/tmp,设为常用节点,启动方式为ssh
为SSH添加证书,选择不校验,尽量保持代理在线
为master节点配置从节点
将master的构建队列改为0,只负责调度
server4正常访问外网
配置docker项目,关闭ssh shell使用shell
查看控制台输出可以看到成功构建
docker项目执行报错:因为已经调度到了server4上,不能再通过ssh的方式,已经在本机上了,冲突
demo项目选择手动构建
server4查看正在运行的容器可以看到demo正常运行,测试访问正常
二、jenkins用户管理
在页面点击选择管理用户
选择新建用户,填写注册信息
使用刚才创建的用户进行登录
可以看到新创建的用户拥有管理员权限,可以进行全部操作,我们需要将其改为普通权限用户
使用管理员账户登录
安装基于角色的访问控制插件
在系统管理中选择全局安全配置
授权策略由用户可以做任何事改为基于角色权限
然后会出现角色的管理和分配模块
进入,选择角色管理
添加全局角色users,只为其赋予读的权限
添加项目角色demo,赋予其查看凭据,以及任务和运行的相关操作,对所有以demo开头(westos .*)的项目都生效
点击角色分配
为刚才创建的yao用户分配users全局角色和demo项目角色
现在再使用yao这个用户进行登录
现在只能看到demo项目且无法进行配置了
登入admin用户创建一个demo开头的项目
创建完毕
再登入yao用户,也可以看到demo01这个项目
使用yao用户对demo01项目进行删除
删除完成,剩下demo项目
三、jenkins结合ansible
3.1、实验环境准备
真实主机开启虚拟机server5
查看正在运行的虚拟机
在真实主机上为server5添加域名解析
jenkins配置中将agent1节点断开连接
删除agent1节点
点击配置master节点
将执行器数量改为2
禁用docker项目
3.2、项目部署
创建一个新的项目,名为ansible
查看正在运行的虚拟机
server2为gitlab仓库
server3为jenkins,ansible主机
server4和server5是ansible的受控节点
真实主机进入到ansible目录下
server3编辑ansible.repo文件,将baseurl地址设为真实主机的absible目录,然后安装ansible
在gitlab新建playbook代码仓库,设为私有,使用自述文件初始化仓库
选择使用ssh克隆
server2克隆gitlab的项目playbook,可以看到克隆成功
进入到playbook目录,编辑playbook.yaml配置文件
[root@server1 playbook] cat playbook.yaml
---
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: configure apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
enabled: yes
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
在playbook目录中创建inventory目录并进入。
inventory是ansible中的部署对象主机,即playbook.yaml中的hosts包含的对象
创建并编辑prod文件,写入server5节点和端口信息,用于部署
创建并编辑test文件,写入server4节点和端口信息,用于测试
在playbook目录下创建并编辑ansible.cfg配置文件
[root@server1 playbook] cat ansible.cfg
[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文件发送给server2
使用变量方式定义httpd的端口
将httpd.conf文件改名为httpd.conf.j2
server2使用tree
命令查看playbook目录结构如图
server2使用git命令添加并提交上传playbook至gitlab
访问gitlab页面可以看到项目
复制项目的克隆链接
只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数
jenkins页面中配置ansible项目,指定源码的URL,使用ssh证书,指定分支为main
触发器的执行命令写个简单的命令ls -l
在ansible的控制台输出日志中可以看到执行正常
现在为节点之间创建ssh免密
server3切换到/var/lib/jenkins/workspace目录下,查看ansible.cfg文件详细信息
进入jenkens用户,查看密码
为jenkins创建交互式bash,进入jenkins,设置远端用户为devops
server4添加devops用户,并修改密码
server5也添加devops用户,修改密码,用户id要和server4的一致
server3生成ssh密钥
将server3的jenkens用户创建的ssh密钥给server4和server5的devops用户都发一份
测试ssh登录,现在server3的jenkens用户可以免密登陆server4和server5的devops用户
server4和server5为devops用户授权
在jenkins页面配置ansible项目,勾选参数化构建,填写选项参数,变量名称为deploy,选项是prod和test
编写执行shell:
先切换到工作目录,根据playbook.yaml文件的配置,ansible会自动部署在inventory目录下的test或prod
先使用test测试构建项目
在控制台输出日志中可以看到执行成功
server4查看端口状态可以看到8080端口处于开放状态
现在使用prod参数构建项目
查看控制台输出日志,显示部署成功
在server5上查看端口状态,可以看到80端口开放