持续集成与持续交付:(2) jenkins(续)

jenkins端172.25.10.5
vm1172.25.10.11

1. 使用SSH方式远程对节点jenkins进行操作

我的server5是jenkins的master工作节点,我想将任务部署到其他服务端上,该怎么办?可以使用SSH

新建一台虚拟机vm1,添加hosts解析,安装docker-ce,在jenkins端上将证书,daemon文件,内核参数文件套接字权限等给vm1,具体操作和之前的一样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在jenkins端上添加SSH插件

在这里插入图片描述
安装成功后进行系统设置

在这里插入图片描述
ssh端口默认为22
在这里插入图片描述
添加ssh主机信息
在这里插入图片描述
添加vm1的ssh认证,保存
在这里插入图片描述
回到docker项目,增加构建步骤,修改构建信息,使用远程的shell脚本

在这里插入图片描述
控制台输出成功

在这里插入图片描述
在vm1上查看,myapp镜像运行成功
在这里插入图片描述

2. 添加jenkins的agent节点

在实际的工作中我们不可能用jenkins的master节点进行工作,master只负责调度,我们将vm1作为jenkins端的工作节点,让它进行实际的工作,在vm1中安装jdk和jit

在这里插入图片描述
在jenkins端上安装ssh build agent插件

在这里插入图片描述
在系统管理的节点管理内添加节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
具体填写如下:

在这里插入图片描述
将master节点数量设置为0,它只负责调度

在这里插入图片描述
在这里插入图片描述
构建一次SSH,已经在agent-1节点上构建成功了,如图所示

在这里插入图片描述

现在配置docker项目,把远程ssh shell关闭,用shell即可,就可以在vm1上构建,手动构建
\

在这里插入图片描述
控制台输出OK,在agent上

在这里插入图片描述

3. 用户的管理

之前的构建过程我们一直使用的是root用户,实际中应该使用普通用户,对其权限进行一定限制

在jenkins端管理用户

在这里插入图片描述

新建用户

在这里插入图片描述

默认情况下,mj可以使用所有权限,显然不可以(右上角我使用的是这个用户登录)

在这里插入图片描述

返回超级用户,添加基于角色控制的插件

在这里插入图片描述

将用户可以做任何事改称角色控制
在这里插入图片描述

返回系统管理就会出先角色控制选项

在这里插入图片描述
管理角色

在这里插入图片描述
添加用户users,只给一个读的权限,添加项目角色demo,可以看凭据,可以读写运行任务,对demo开头的项目都生效
在这里插入图片描述
分配角色

在这里插入图片描述将mj用户和全局角色绑定,和项目角色demo绑定
在这里插入图片描述
登录mj用户查看效果,只能看到demo项目,无法看到docker项目

在这里插入图片描述重新上admin用户,新建一个demo项目

在这里插入图片描述

创建完成后,重新登陆mj用户可以看到demo1项目

在这里插入图片描述
也可以管理demo开头的项目,删除demo01

在这里插入图片描述

4. jenkins结合ansible部署apache

(1) 清理环境

jenkins端回到admin用户,恢复master节点,先断开agent,删除agent节点

在这里插入图片描述恢复master节点为2

在这里插入图片描述
禁用docker项目

在这里插入图片描述

(2) 开始部署

再新建一个vm2

server5jenkins ansible主机 2G内存
server6gitlab私有仓库 4G内存
vm1 vm2部署ansible的节点 1G内存
server1harbor仓库,暂时关闭,需要的时候启用

新建项目ansible
在这里插入图片描述
在jenkins端上编写yum源,安装ansible

在这里插入图片描述
gitlab上新建项目 playbook
在这里插入图片描述
克隆gitlab的项目playbook,产生了playbook目录

在这里插入图片描述

[root@server6 playbook]# ls
ansible.cfg  inventory  playbook.yaml  README.md
[root@server6 playbook]# cat playbook.yaml 
---
- hosts: all                              所有主机下面执行命令
  tasks:
  - name: install apache                  安装apache
    yum:
      name: httpd
      state: present
  - name: configure apche                 配置apache
    template: 
      src: httpd.conf.j2                  使用jinjia模板
      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
[root@server6 playbook]# cat ansible.cfg     该ansible的配置文件会覆盖原本的路径下的配置文件
[defaults]
command_warnings=False
remote_user=devops

[privilege_escalation]
become=True                     
become_method=sudo                支持sudo 
become_user=root                  默认用户root
become_ask_pass=False             使用sudo不需要密码
[root@server6 playbook]# cd inventory/
[root@server6 inventory]# cat test 
vm1 http_port=8080                            测试
[root@server6 inventory]# cat prod 
vm2 http_port=80                              部署生产环境
[root@server6 inventory]# 

从其他端上复制httpd.conf文件到gitlab端
在这里插入图片描述
编辑http配置文件的端口为变量,对于vm1是8080,对于vm2是80

在这里插入图片描述
playbook目录的框架如下
在这里插入图片描述
上传到gitlab

在这里插入图片描述
在这里插入图片描述
在gitlab端查看

在这里插入图片描述
在jenkins端修改ansible项目配置,指定gitlab的URL,使用ssh证书,指定分支为main

在这里插入图片描述
执行一个简单的shell

在这里插入图片描述
查看控制台输出正常

在这里插入图片描述
因为jenkens流水线执行时使用的是jenkins用户,ansible执行时使用的是devops用户,所以vm1的jenkens用户要和vm2的devops用户建立ssh连接免密登陆, server5的jenkens用户也要和vm2的devops用户建立ssh连接免密登陆。

vm1上创建用户,添加密码

在这里插入图片描述

vm2上创建用户,添加密码
在这里插入图片描述
server5的jenkins用户没有交互界面,所以先修改为bash,进入jenkens用户,生成ssh密钥

在这里插入图片描述
在server5上用jenkins用户将密钥给vm1和vm2的devops用户都发送

在这里插入图片描述
测试:server5的jenkins用户可以免密登录vm1 vm2 的devops用户

在这里插入图片描述
在vm1和vm2上使用 visudo命令修改devops用户权限

在这里插入图片描述

回到jenkins页面ansible项目的配置,选择设定参数化构建,选项参数,即使用变量

在这里插入图片描述
要设置两个可利用变量,($WORKSPACE)去当前项目的工作目录里面,根据playbook.yaml文件ansible自动部署在inventory目录下的test或prod

在这里插入图片描述

选择在test上部署,测试代码是否有问题
在这里插入图片描述
查看控制台输出,没有问题

在这里插入图片描述
在vm1(test的虚拟机)上测试一下,8080端口没问题

在这里插入图片描述
现在部署prod

在这里插入图片描述
控制台输出OK

在这里插入图片描述
在vm2上看80端口没问题

在这里插入图片描述

5. jenkins也可以和k8s结合使用

结构如图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值