基于jenkins+gitlab+docker部署zabbix

背景

我现在已经在一台服务器上部署了jenkins和gitlab,现在有一个场景是需要在服务器上再部署一个zabbix,需要通过jenkins加上gitlab部署,并且要求zabbix是通过docker部署的

前提条件

jenkins、gitlab已完成部署并能正常访问,服务器docker能够正常使用

部署流程

一、准备Zabbix的Docker部署文件

1、创建Git仓库:

在GitLab上创建一个新的仓库,比如命名为zabbix-docker,用来存放Zabbix的Docker部署文件。

mkdir zabbix_docker
cd zabbix_docker
git init
git clone http://{git_ip}:{端口}/root/zabbix_docker.git
#输入git用户名/密码拉取文件,这里目前是空的,正常拉取即可

2、编写Dockerfile:

如果你打算自定义Zabbix镜像,可以在仓库中添加一个Dockerfile。不过,为了简单起见,我们直接使用官方的Zabbix Docker镜像。

3、编写docker-compose.yml:

在仓库根目录下创建docker-compose.yml文件,内容大致如下:

vim docker-compose.yml
version: '3'
services:zabbix-server:image: zabbix/zabbix-server-mysql:latestenvironment:DB_SERVER_HOST: "mysql-server"MYSQL_DATABASE: "zabbix"MYSQL_USER: "zabbix"MYSQL_PASSWORD: "your_password"ports:- "10051:10051"mysql-server:image: mysql:5.7environment:MYSQL_DATABASE: "zabbix"MYSQL_USER: "zabbix"MYSQL_PASSWORD: "your_password"MYSQL_ROOT_PASSWORD: "your_root_password"volumes:- zabbix-mysql:/var/lib/mysqlvolumes:zabbix-mysql:driver: local

二、配置Jenkins

1、安装插件:

确保Jenkins安装了GitLab插件和Docker插件。

  • 首先,使用你的账号登录Jenkins的Web界面,在Jenkins的首页上,找到“系统管理”或“Manage Jenkins”,点击进入。
  • 在系统管理页面,找到“插件管理”或“Manage Plugins”,点击进入。
  • 在插件管理页面,切换到“可用”或“Available”标签页,这里列出了所有可以安装的插件。
  • 在页面顶部的搜索框中,分别输入“GitLab”和“Docker”来搜索这两个插件。
  • 对于GitLab插件,你可能会看到“GitLab Plugin”这样的结果,这就是我们需要的。
  • 对于Docker插件,可能会有几个与Docker相关的插件,但通常你需要的是“Docker Pipeline”插件,它允许你在Jenkinsfile中定义Docker相关的操作。
  • 找到这些插件后,勾选它们旁边的复选框,然后点击页面底部或顶部的“立即安装”、“Install without restart”或“Download now and install after restart”。
  • 安装插件可能需要一些时间。安装完成后,根据提示重启Jenkins(如果需要)。

2、创建新的Jenkins任务:

为了部署Zabbix,你需要在Jenkins中创建一个新的任务。

  • 返回Jenkins首页,点击“新建任务”或“Create a new job”。
  • 输入任务名称:在“任务名称”或“Enter an item name”处输入你的项目名称,例如“Deploy_Zabbix”。
  • 选择任务类型:选择一个适合的任务类型,通常对于这种情况,你可以选择“自由风格软件项目”或“Freestyle project”。
  • 点击“确定”或“OK” 创建任务。

3、配置GitLab源:

在任务配置中,设置GitLab仓库的URL和认证信息,以便Jenkins能够从GitLab拉取Zabbix的部署文件。

  • 在任务配置页面,找到“源码管理”或“Source Code Management”部分,选择“Git”。
  • 填写仓库URL:在“Repository URL”处填写你的GitLab仓库的URL。
  • 填写凭据:如果你的GitLab仓库需要认证,点击“添加”或“Add”按钮,选择“Jenkins”来添加凭据(用户名和密码或者私钥)。

可能出现的问题:
在这里插入图片描述
首先需要确认选择的用户密码是不是gitlab拉取到的,其次需要确认jenkins安装完插件后是否正常重启。

这个HTTP ERROR 403 No valid crumb was included in the request错误是Jenkins的防跨站请求伪造(CSRF)保护机制导致的。当你尝试提交表单时,Jenkins会期望一个有效的“crumb”用于验证请求,这个错误通常发生在Jenkins的“crumb”验证没有正确配置或者客户端没有正确提交“crumb”。
解决这个问题的方法通常包括:

禁用CSRF保护(不推荐):

进入Jenkins系统配置(Manage Jenkins -> Configure Global Security)。
取消选中“防止跨站点请求伪造”或类似的选项。
保存设置。
请注意,禁用CSRF保护会降低Jenkins的安全性,因此这不是一个推荐的解决方案。

更新Jenkins到最新版本:
有时候,这个问题是由于Jenkins的一个已知问题导致的,更新到最新版本可能可以解决。

确保Jenkins URL配置正确:
在系统配置中检查Jenkins的根URL设置是否正确。

清除浏览器Cookies和缓存:
有时候,清除浏览器的Cookies和缓存可以解决这个问题。

使用API Token代替密码:
在Jenkins中为你的用户生成API Token,并在克隆Git仓库时使用用户名和API Token代替用户名和密码。

通过脚本直接获取Crumb并使用:
可以通过编写脚本从Jenkins API获取crumb,并在之后的请求中使用这个crumb。

重新登录:
有时候,简单的重新登录到Jenkins可以刷新你的session和crumb。
检查代理或网络设置:

如果你是通过代理服务器或有特殊网络配置访问Jenkins,确保代理或网络设置不会阻止crumb的传递。
从安全的角度出发,建议不要禁用CSRF保护。你可以尝试其它的方法来解决这个问题。如果你不确定如何操作,可以联系你的系统管理员协助处理。

4、添加构建步骤:

  • 首先,在Jenkins的界面上找到你刚刚创建的任务,进入该任务的页面。
  • 在任务页面上,点击“配置”或“Configure”按钮以进入任务的配置页面。
  • 在配置页面中,找到“构建”或“Build”这一部分。在这一部分,你可以添加不同类型的构建步骤。
  • 点击“添加构建步骤”(“Add build step”)后,在下拉菜单中选择“执行Shell”(“Execute shell”)或者类似的命令来添加一个Shell脚本执行步骤。

在构建步骤中,添加Shell脚本来执行Docker部署,脚本内容大致如下:

#!/bin/bash
cd /path/to/your/zabbix-docker
docker-compose down
docker-compose up -d

注意替换/path/to/your/zabbix-docker为你的实际路径。

  • 编辑完成后,记得点击页面底部的“保存”(“Save”)按钮保存你的配置。
  • 保存配置后,回到任务页面,点击“立即构建”(“Build now”),Jenkins就会根据你的脚本来执行构建任务。

三、配置GitLab与Jenkins的集成

1、Webhook:

在GitLab项目设置中,找到Webhooks部分,添加一个新的Webhook,URL设置为Jenkins任务的URL,这样每次GitLab上的代码更新都会触发Jenkins任务自动运行。

四、测试部署

1、推送更新:

向GitLab仓库推送任何更新,比如修改docker-compose.yml文件。

2、观察Jenkins:

推送更新后,Jenkins任务应自动运行,开始部署Zabbix。

3、验证Zabbix部署:

Jenkins任务完成后,访问Zabbix的Web界面,检查是否部署成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/801590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再探Java为面试赋能(二)Java基础知识(二)反射机制、Lambda表达式、多态

文章目录 前言1.4 反射机制1.4.1 Class对象的获取1.4.2 Class类的方法1.4.3 通过反射机制修改只读类的属性 1.5 Lambda表达式1.5.1 函数式接口1.5.2 Lambda表达式的使用 1.6 多态1.6.1 多态的概念1.6.2 多态的实现条件1.6.3 重载(Overload)和重写&#x…

大数据之搭建Hive组件

声明:所有软件自行下载,并存放到统一目录中 1.Hive组件的安装配置 1.1实验环境 服务器集群3 个以上节点,节点间网络互通,各节点最低配置:双核 CPU、8GB 内存、100G 硬盘运行环境CentOS 7.4服务和组件完成前面章节实验…

Java基础笔记(一)

一、面向对象高级基础 1.Java的动态绑定机制 public class DynamicBinding {public static void main(String[] args) {//a 的编译类型 A, 运行类型 BA a new B();//向上转型System.out.println(a.sum());//40 子类sum()注释后-> 30System.out.println(a.sum1());//30 子类…

android-自定义TextView在文字内容末尾添加图片icon、可以添加间距

样式示意图 自定义属性 style.xml <declare-styleable name"IconLabelTextView"><attr name"iconSrc" format"reference"/><attr name"iconPaddingStart" format"dimension"/><attr name"iconPad…

访问网站显示不安全是什么原因?怎么解决?

访问网站时显示“不安全”&#xff0c;主要原因以及解决办法&#xff1a; 1.没用HTTPS加密&#xff1a;网站还在用老的HTTP协议&#xff0c;数据传输没加密&#xff0c;容易被人偷看或篡改。解决办法是网站管理员启用HTTPS&#xff0c;也就是给网站装个“SSL证书”。这个是最常…

模块十三 异常_Object

回顾与重点 模块十二回顾 权限修饰符&#xff1a; public → protected → 默认 → private a. 构造一般用public&#xff1a;便于new对象 b. 成员方法一般用public&#xff1a;便于调用 c. 属性一般用private&#xff1a;封装思想 final&#xff1a;最终的 a. 修饰类&#x…

k8s_入门_kubelet安装

安装 在大致了解了一些k8s的基本概念之后&#xff0c;我们实际部署一个k8s集群&#xff0c;做进一步的了解 1. 裸机安装 采用三台机器&#xff0c;一台机器为Master&#xff08;控制面板组件&#xff09;两台机器为Node&#xff08;工作节点&#xff09; 机器的准备有两种方式…

前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住

固定列fixed滚动条被固定列盖住 效果图前言解决方案 效果图 前言 在使用fixed固定列的时候会出现滚动条被盖住的情况 解决方案 改变el-table固定列的计算高度即可 .el-table {.el-table__fixed-right,.el-table__fixed {height:auto !important;bottom:15px !important;}}

数据结构(七)——查找的基本概念

七、查找 7.1 查找的基本概念 7.1.1 基本概念 查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找 查找表&#xff08;查找结构&#xff09;—— ⽤于查找的数据集合称为查找表&#xff0c;它由同⼀类型的数据元素&#xff08;或记录&#xff09;组成 关键字 …

Golang | Leetcode Golang题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; func fourSum(nums []int, target int) (quadruplets [][]int) {sort.Ints(nums)n : len(nums)for i : 0; i < n-3 && nums[i]nums[i1]nums[i2]nums[i3] < target; i {if i > 0 && nums[i] nums[i-1] || nums[i]…

数字化智慧养老:引领老年人融入科技时代新生活

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 人类社会已经步入了一个全新的数字时代。在这个时代&#xff0c;互联网、大数据、人工智…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf&#xff08;会把所有图…

全国火情预报卫星遥感应用方案

一、引言 火情预报应急卫星遥感解决方案是一种利用卫星遥感技术进行火灾预警和应急响应的方法。该方案通过实时监测和分析森林、草原等地区的火情信息&#xff0c;为火灾预警和应急响应提供科学依据&#xff0c;有效减少火灾造成的损失。本技术文档将介绍火情预报应急卫…

Java | Leetcode Java题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> quadruplets new ArrayList<List<Integer>>();if (nums null || nums.length < 4) {return…

el-cascader的懒加载模式怎么设置默认值

点击修改会跳出一个dialog&#xff0c;dialog需要显示信息&#xff0c;其中地址使用el-cascader标签并使用懒加载实现&#xff0c;地址数据都是从后台获取&#xff0c;如果直接使用v-model绑定默认值&#xff0c;会不显示。 解决方法1&#xff1a; <el-cascader class&quo…

React - 请你说一说setState是同步的还是异步的

难度级别:中高级及以上 提问概率:70% 在React项目中,使用setState可以更新状态数据,而不能直接使用为this.state赋值的方式。而为了避免重复更新state数据,React首先将state添加到状态队列中,此时我们可以通过shouldComponentUpdate这个钩…

Python编程启航:大学生如何用代码编织未来

开篇 掌握Python&#xff0c;打开编程世界的大门&#xff01;作为一名大学生&#xff0c;你是否渴望在编程的海洋中遨游&#xff0c;用代码编织未来&#xff1f; &#x1f31f;&#x1f680;现在就跟随我一起&#xff0c;探索Python编程的奇妙之旅&#xff0c;解锁学习技巧、…

数据库——实验6 视图的创建与使用

1. 视图的定义 视图是根据需要以一个表或多个表为基础&#xff0c;选择满足一定条件的行或列数据的静态定义。它是一种逻辑对象&#xff0c;是一种虚拟表。视图并不生成行或列的永久副本&#xff0c;并不占用存储空 间&#xff0c;也就是说&#xff0c;视图就是保存在数据库中…

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3&#xff1a; Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。…

函数重载和引用【C++】

文章目录 函数重载什么是函数重载&#xff1f;函数重载的作用使用函数重载的注意点为什么C可以函数重载&#xff0c;C语言不行&#xff1f; 引用什么是引用&#xff1f;引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…