目录

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


一、jenkins节点管理

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

server4安装jdk(jenkins是用Java开发的)和git(有的数据是用git拉取的)

jenkins 怎么跟节点通信 jenkins节点管理_git


jenkins安装ssh agent插件

jenkins 怎么跟节点通信 jenkins节点管理_apache_02


进入系统管理,节点管理

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_03


选择新建节点,固定节点属性

jenkins 怎么跟节点通信 jenkins节点管理_git_04


添加agent节点的信息,启动方式为ssh,为SSH添加证书,选择不校验,尽量保持代理在线

jenkins 怎么跟节点通信 jenkins节点管理_git_05


jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_06


为master节点配置从节点,并把master节点的数量变为0,master只负责调度

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_07


jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_08


回到Dashboard,点击demo进行手动触发,查看控制台输出可以看到成功构建(提前确保仓库运行正常)

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_09


但是docker项目执行报错,这是因为已经调度到了server4上,不能再通过ssh的方式,已经在本机上了,会发生冲突;

因此,配置docker项目,把ssh shell关闭,用shell即可

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_10


再次触发docker ,查看控制台成功构建

jenkins 怎么跟节点通信 jenkins节点管理_apache_11


server4查看正在运行的容器可以看到demo正常运行,测试访问正常

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_12

二、jenkins用户管理

接下来对普通用户的权限进行一定的限制,点击系统管理,选择管理用户

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_13


选择新建用户,填写注册信息

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_14


使用刚才创建的用户进行登录

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_15


可以看到,默认情况下新建的用户具有所有权限,可以进行全部操作,这显然不合适

jenkins 怎么跟节点通信 jenkins节点管理_运维_16


我们需要将其改为普通权限用户,使用管理员账户登录,安装基于角色的访问控制插件

jenkins 怎么跟节点通信 jenkins节点管理_git_17


在系统管理中选择全局安全配置

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_18


从原来的登陆用户可以做任何事改为基于角色的控制

jenkins 怎么跟节点通信 jenkins节点管理_apache_19


然后就会出现基于角色控制的模块

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_20


管理角色

jenkins 怎么跟节点通信 jenkins节点管理_apache_21


添加全局角色,users,权限只有读

jenkins 怎么跟节点通信 jenkins节点管理_运维_22


添加项目角色demo,赋予其查看凭据,以及任务和运行的相关操作,对所有以demo开头(westos .*)的项目都生效

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_23


点击角色分配

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_24


为刚才创建的lr用户分配users全局角色和demo项目角色

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_25


现在再使用lr这个用户进行登录,无法修改配置了,且看不到docker项目了,只能看到demo项目

jenkins 怎么跟节点通信 jenkins节点管理_git_26


切回root用户,创建一个demo01项目

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_27


创建成功

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_28


现在切到lr用户,demo开头的项目都可以管理,也可以删除demo01项目

jenkins 怎么跟节点通信 jenkins节点管理_运维_29


删除完成,只剩下demo项目

jenkins 怎么跟节点通信 jenkins节点管理_运维_30

三、jenkins结合ansible部署apache

1.环境配置

root用户登录,jenkins配置中将agent1节点断开连接

jenkins 怎么跟节点通信 jenkins节点管理_运维_31


删除agent1节点

jenkins 怎么跟节点通信 jenkins节点管理_git_32


恢复master工作节点数量为2

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_33


为了净化环境,禁用了docker项目

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_34


真实主机再开启一个虚拟机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

jenkins 怎么跟节点通信 jenkins节点管理_运维_35


server3配置yum源,编辑ansible.repo文件

jenkins 怎么跟节点通信 jenkins节点管理_运维_36


jenkins 怎么跟节点通信 jenkins节点管理_运维_37


安装ansible

jenkins 怎么跟节点通信 jenkins节点管理_运维_38


在gitlab新建playbook代码仓库,设为私有,使用自述文件初始化仓库

jenkins 怎么跟节点通信 jenkins节点管理_git_39


使用ssh克隆

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_40


server2克隆gitlab的项目playbook,可以看到克隆成功

jenkins 怎么跟节点通信 jenkins节点管理_apache_41


框架如下

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_42


进入到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节点和端口信息,用于部署。

jenkins 怎么跟节点通信 jenkins节点管理_apache_43


在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

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_44


server4安装httpd服务(为了获得httpd.conf文件)

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_45


将httpd.conf文件发送给server2

jenkins 怎么跟节点通信 jenkins节点管理_运维_46


server2将httpd.conf文件改名为httpd.conf.j2

jenkins 怎么跟节点通信 jenkins节点管理_git_47


编辑httpd.conf.j2文件,使用变量方式定义httpd的端口

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_48


server2使用git命令添加并提交上传playbook至gitlab

jenkins 怎么跟节点通信 jenkins节点管理_运维_49


可以中gitlab页面看到项目,复制项目的克隆链接

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_50


回到jenkins,配置ansible项目,指定gitlab的URL,使用ssh证书,指定分支为master;

(只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数)

jenkins 怎么跟节点通信 jenkins节点管理_运维_51


执行命令先简单写ls,创建

jenkins 怎么跟节点通信 jenkins节点管理_apache_52


在ansible的控制台输出日志中可以看到执行正常

jenkins 怎么跟节点通信 jenkins节点管理_git_53


因为jenkens流水线执行时使用的是jenkens用户身份,ansible执行时使用的是devops用户,所以server3的jenkens用户要和server4/5的devops用户建立ssh连接免密登陆,现在为节点之间创建ssh免密。

server3切换到/var/lib/jenkins/workspace目录下,查看ansible.cfg文件详细信息

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_54


进入jenkens用户,查看密码

jenkins 怎么跟节点通信 jenkins节点管理_apache_55


jenkins 怎么跟节点通信 jenkins节点管理_jenkins_56


为jenkins创建交互式bash,进入jenkins,设置远端用户为devops

jenkins 怎么跟节点通信 jenkins节点管理_git_57


server4/5建立devops用户,设置密码(注意:两个devops的用户id要一致)

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_58


jenkins 怎么跟节点通信 jenkins节点管理_apache_59


server3生成ssh密钥

jenkins 怎么跟节点通信 jenkins节点管理_运维_60


server3的jenkens用户把ssh密钥给server4/5的devops用户各发一份

jenkins 怎么跟节点通信 jenkins节点管理_apache_61


接下来,测试ssh登录,可以看到server3的jenkens用户可以免密登陆server4/5的devops用户

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_62


分别对server4/5的devops用户授权

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_63


jenkins 怎么跟节点通信 jenkins节点管理_jenkins_64


回到jenkins页面ansible项目的配置,设定参数化构建,选项参数,即使用变量(变量名称为deploy,代表:prod或test)

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_65


编写执行shell:先切换到工作目录,根据playbook.yaml文件的配置,ansible会自动部署在inventory目录下的test或prod

jenkins 怎么跟节点通信 jenkins节点管理_apache_66


首先选择在test上部署

jenkins 怎么跟节点通信 jenkins节点管理_git_67


控制台显示test上部署成功

jenkins 怎么跟节点通信 jenkins节点管理_apache_68


server4查看端口状态,此时8080端口处于开放状态

jenkins 怎么跟节点通信 jenkins节点管理_jenkins 怎么跟节点通信_69


现在使用prod参数构建项目

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_70


查看控制台输出日志,显示部署成功

jenkins 怎么跟节点通信 jenkins节点管理_git_71


在server5上查看端口状态,可以看到80端口开放

jenkins 怎么跟节点通信 jenkins节点管理_jenkins_72