持续集成与持续交付(下)

本文详细介绍了jenkins的节点管理,包括如何创建和配置jenkins agent,以及远程交付的实现。此外,还涉及jenkins用户管理,通过角色权限控制用户访问。同时,展示了jenkins与pipeline的结合,实现自动化构建和部署流程,并利用dingding进行构建状态报警。最后,jenkins与ansible集成,实现自动化运维任务。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

目录

一、jenkins节点管理

二、jenkins用户管理

三、Jenkins结合pipeline

       扩展:jenkins远程交付

四、jenkins结合dingding报警

五、jenkins结合ansible

一、jenkins节点管理

实际工作中master节点只负责调度 需要创建agent节点进行工作 

真机创建新的虚拟机git4作为master的agent

为了实验效果 如果内存不够的话 512MiB即可

修改虚拟机git4名称为server14 作为master的agent 

server14安装jdk

 

jenkins安装SSH Build Agents插件

进入节点管理界面 

选择新建节点  节点名称为builder-1选择固定节点属性 

编辑builder-1节点信息  描述为docker build host  执行器为5   远程工作目录在/tmp  设为常用节点 尽可能的使用这个节点

启动方式为SSH 需要添加SSH插件 

为SSH添加证书选择不校验 尽量保持代理在线 

这时我们可以看到builder-1的状态ok 

在server14上 通过SSH 开启了一个java进程 

将master的构建队列改为0 只负责调度 

可以看到只有agent上有构建队列 

server14安装docker

server13发送yum到server14

server14安装docker 

server13发送docker.cof文件到server14   

server14 sysctl --system使之生效 

设置docker开机自启

  

将证书和配置文件发送到server15的/etc/docker目录下 

添加仓库解析 

重启docker  docker info查看docker配置成功

禁用docker_project_test交付项目 

test点击立即构建 

控制台发现报错 

我们发现在构建主机的tmp/workspace/test下 没有拉取到项目是因为iserver14上没有git命令

server14安装git 

再次触发  控制台输出成功

构建主机已经把这个任务分配到了新的构建主机agent上  server14上查看构建成功 

二、jenkins用户管理 

在页面点击选择管理用户 

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

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

可以看到新建的用户拥有管理员权限 可以进行全部操作 我们需要将其修改为普通权限用户 

使用管理员账户登陆 

安装基于角色的访问控制插件 

在系统管理中选择全局安全配置 授权策略由用户可以做任何事改为基于角色权限 

使用普通用户进行登陆 

进去发现普通用户没有任何权限 

我们需要为它赋予一些权限 使用管理员用户进行登陆 

启动了全局安全后会出现角色的管理和分配模块

进入选择角色管理 

添加全局角色user 只为其赋予读的权限 

点击分配角色 

为刚才创建的lzw角色分配user用户角色 

现在在使用lzw用户进行登陆 

可以看到有red的权限 看不到任何项目 

再次注销 用admin管理员账户登陆 

普通用户需要什么权限就为它创建什么权限 

进入管理和分配模块  点击管理角色 添加管理test项目

保存退出进入分配角色中  添加用户lzw 选中项目role1角色

使用普通用户进行登陆 发现我们分配的项目角色什么都没有看到 这是因为我们为它分配了一个项目角色 但没有赋予任何权限 

使用管理员账户进行登陆 为其项目赋予一个读的权限 

用普通用户lzw进行登陆 现在只能看到test项目并且无法进行配置 

这时我们再用admin用户进去为其添加构建和配置权限 

用普通用户lzw进行登陆 进入到test项目中 可以看到当前可以进行构建和配置

再次使用管理员用户进行登陆 

三、jenkins结合pipeline 

首先禁掉项目(禁不禁无所谓) 

新建流水线风格项目devops

编辑流水线脚本输出一个HelloWorld  

查看控制台输出成功 

可以在devops项目内看见生成了一个流水线 

继续编辑脚本  

点击开始构建第三次正在运行 

第三次构建成功 可以看到一个完整的流水线 building testing deploying  

打开流水线语法 

点击片段生成器进行编辑 

将流水线脚本 粘贴到pipeline script脚本中 

再次点击进行构建可以看见构建成功

查看将远程仓库的项目文件克隆到构建主机agent server14上 

修改脚本信息 进行docker构建 

构建成功 查看控制台输出 

仓库查看镜像上传成功 

编辑shell文件  部署到远程server14交付主机

部署主机server14上SSH-KEYGE生成密钥文件 设置server15免密

开始构建 

查看控制台输出  

 编辑pipeline shell 在远端交付主机上部署myweb容器 

点击开始构建 查看构建失败 在部署这步出了问题

查看控制台输出 发现错误为远端交付主机server14没有docker命令  没有安装docker   

server14安装docker 

设置仓库解析  

此处我们可以进行一个扩展 

jenkins远程交付

在生产环境中 jenkins上面的构建项目任务会有很多  jenkins既要做构建又要做测试交付项目太多会导致jenkins平台不稳定  上边实验我们将jenkins构建放到了新建的agent上来做  这里也可以将jenkins的测试交付发送到远程主机来进行

我们将server14作为远程交付主机 

首先关闭构建主机agent 

将master构建主机队列改回原来的2个 

断开devops项目 启动docker_project_test和test项目

下载安装SSH插件用于远程ssh方式访问 上边已经下载 

点击系统配置 设置ssh连接的主机 

将server15的信息填入 添加jenkins凭据

此处发现点击add没任何变化  我们需要配置全局管理凭证系统

 

再次回到管理配置系统设置ssh连接的主机 

测试成功 

进入此项目 点击配置

查看server13jenkins主机上没有任何容器 

如果有容器的话删除 

查看server15上没有任何容器 

测试 整体推进  

在gitlab项目下prodject1 编辑index.html文件 

提交上传至gitlab代码仓库 

gitlab上查看更新成功 

触发jenkins 在test项目中查看构建失败

 

查看控制台输出可以看出出现此问题是由于docker权限不足 为其设置777权限

  

开始重新构建 构建成功 

仓库查看上传成功 

浏览器访问成功 

回到 jenkins结合pipeline 

暂停docker_project_test和test项目

启动构建主机agent

设置master构建主机序列为0 

开始第8次构建 发现构建失败

查看原因  

在远程交付主机上已经存在myweb容器

编辑 shell 先过滤远程交付主机上已经存在此容器 删掉这个容器以及它的镜像 在重新运行

开始第十次构建 构建失败 查看控制台输出错误信息错误原因:docker服务启动时自定义的自定义链DOCKER由于某种原因被清掉

重启docker服务即可以重新生成自定义链DOCKER 

开始第11次构建  查看构建成功

浏览器访问172.25.15.15 

配置主动触发构建 

将网址和令牌粘贴到webhooks下 实现自动拉取代码

开始测试  修改index.html文件

提交并上传 

自动触发 查看正在构建 

构建成功 

浏览器访问成功 

四、jenkins结合dingding报警 

首先 linux上安装钉钉软件 创建一个测试群 添加一个机器人

查看机器人添加成功 

jenkins下载安装dingding插件 

点击系统管理进入系统配置

点击测试 

查看钉钉群 

进入devops项目配置 编辑pipeline shell 

点击开始构建 查看正在构建 

查看构建成功 

这时钉钉会为我们发送构建成功信息 

修改pipeline shell 注释掉登陆步骤

开始构建肯定会报错 

这时钉钉会发送一个上线失败的告警 

修改pipeline shell 取消注释 

在生产环境中需要将将此代码通过 gitlab来进行版本控制 提交和修改需要有记录 

在 gitlab中创建一个新项目

 

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
               git branch: 'main', credentialsId: 'f5a60d83-cc50-4571-9475-0554626d7436', url: 'git@172.25.15.12:root/project1.git'
            }
        }
        stage('build image and push') {
            steps {
                sh '''
                    cd $WORKSPACE
                    docker build -t reg.westos.org/library/demo:${BUILD_NUMBER} .
                    docker login reg.westos.org -u admin -p westos
                    docker push reg.westos.org/library/demo:${BUILD_NUMBER}
                    docker tag reg.westos.org/library/demo:${BUILD_NUMBER} reg.westos.org/library/demo:latest
                    docker push reg.westos.org/library/demo:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
                sh '''
                    ssh -i /root/.ssh/id_rsa root@172.25.15.15 """
                    docker ps -a | grep myweb && docker rm -f myweb
                        docker rmi demo:latest
                        docker run -d --name myweb -p 80:80 demo:latest
                    """
                '''    
            }
        }
    }
    post {
        success {
            dingtalk (
            robot: '56f4f214-ef2d-4e2a-a1d8-5b274cf8d5c2',
            type: 'TEXT',
            at: ["17629133215"],
            atAll: false,
            title: 'jenkins',
            text: ["online success"],
            hideAvatar: false
            )
        }
        failure {
            dingtalk (
            robot: '56f4f214-ef2d-4e2a-a1d8-5b274cf8d5c2',
            type: 'TEXT',
            at: ["17629133215"],
            atAll: false,
            title: 'jenkins',
            text: ["online failure"],
            hideAvatar: false
            )
        }
    }
} 

进入devops项目配置 

 

点击立即构建 查看正在构建

查看构建成功 

这时钉钉又会为我们发送构建成功提醒 

五、jenkins结合ansible 

master节点添加两个worker

关闭agent节点并删除 

最后查看只有master节点

jenkins主机上安装ansible

阿里巴巴开源镜像站-阿里云官网开发者社区_云计算社区提供全面,高效和稳定的系统镜像、应用软件下载、域名解析和时间同步服务https://developer.aliyun.com/packageSearch?word=%EF%BD%81%EF%BD%8E%EF%BD%93%EF%BD%89%EF%BD%82%EF%BD%8C%EF%BD%85

 

gitlab上新建ansible项目

使用ssh克隆到本地 

server14 15作为测试机 停掉server14 15的docker 避免后面端口冲突 

编辑ansible.cfg主配置文件 

 创建inventory目录清单 编辑test prod组

编辑playbook.yaml文件 

编辑index.html.j2模板文件

git add .添加当前目录所有文件到暂存区

git commit -m 提交所有文件到版本库

git push上传到gitlab代码仓库ansible项目中  

gitlab代码仓库ansible项目查看推送内容 

jenkins新建自由风格项目 playbook 

参数化构建中选择选项参数 

参数化构建过程 填写选项参数内容

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

指定分支为*/main 保存

开始构建 

构建成功 查看控制台输出 

ansible通过ssh方式将playbook推送到远端受控主机 在通过sudo来运行 默认情况下jenkins会已jenkins用户来访问远端主机 

jenkins运行时是以jenkins身份来运行  

server15 14 创建devops用户 并进行visudo授权

 

server15 14 为用户devops设置密码 

Jenkins服务器提前部署好到目标主机的ssh免密

由于是以jenkins用户调用ansible命令,所以需要设置jenkins用户到目标主机的免密 

root用户添加解析 

jenkins用户为server14 15设置免密 

登陆进去确认免密设置成功 

测试

测试出错 认证问题当前是用超级用户执行ansible-playbook  

超级用户没有做ansible受控主机的免密 

在playbook项目中进行构建

查看构建成功 

进入playbook项目中进行配置

 

点击构建选择test组 

第4次构建成功 查看控制台输出

server15查看开启了http80端口  

server14查看没有开启80端口  

开始进行第5次构建 选择prod组 

构建成功查看控制台输出 

server4开启了http80端口 

  

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值