DevOps与CI/CD简介

DevOps 是一种软件开发和运维的文化、实践和方法论,旨在通过加强开发团队和运维团队之间的合作和沟通,实现快速、高效、可靠的软件交付和运维。DevOps 是由 Development(开发)和 Operations(运维)两个单词组合而成的缩写。

在这里插入图片描述
DevOps 的目标是通过实现上述实践和原则,缩短软件交付周期、提高交付频率、降低故障率、加强团队合作,从而实现更快速、更灵活、更可靠的软件开发和运维。

DevOps的核心在于CI/CD,实现自动化集成CI能帮助程序员极大减少在开发打包,构建,测试的时间。

Jenkins是一个自动化服务器,是比较成熟的CI工具(也可以CD)能够实现自动化集成发布。

特点:

  • 开源免费
  • 多平台支持(windows/linux/macos)
  • 主从分布式架构
  • 提供web可视化配置管理页面
  • 安装配置简单
  • 插件资源丰富

Jenkins

jenkins中文文档

Jenkins由java语言开发因此,需要JRE环境。

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

安装成功后jenkins会自动启动,如果没有启动可能是端口被占用了因为jenkins默认使用8080端口为常用端口。

修改/etc/init.d/jenkins文件 修改HTTP_PORT=8080为其他未被占用的端口即可,如下:

在这里插入图片描述

其他系统的暗账请参考官网安装Jenkins

除了docker,系统上安装jenkins还支持web一件应用,直接通过启动web服务完成,直接下载jebkins.war,使用web容器运行。jenkins是由java语言写的,在任何存在jre和jdk的环境都可以启动。

运行jenkin服务:java -jar jenkins.war --httpPort=8080

打开浏览器进入链接 http://localhost:8080.

在这里插入图片描述
根据提示查看密码:

在这里插入图片描述

安装组件:

在这里插入图片描述
自动安装组件

在这里插入图片描述
等待安装完成后创建用户

在这里插入图片描述
在这里插入图片描述
设置完成登录
在这里插入图片描述
进入主页

在这里插入图片描述

Jenkins Pipeline(或简称为 “Pipeline”)是一套插件,将持续交付的实现和实施集成到 Jenkins 中。pipeline的构建过程遵循的规则被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。

选择New Item,填写pipline名称,选择构建的任务类型,一般为Multibranch Pipeline

在这里插入图片描述
配置流水线,如下:

在这里插入图片描述
添加代码仓库,jenkins是从代码从库获取代码的

在这里插入图片描述

根据需要配置,配置完成后,jenkins就会获取代码并打包,如下:

在这里插入图片描述
但是我们可以看到jenkins自动从仓库获取了代码,但是由于没有Jenkinsfile没有构建流程。接下来学习Jenkinsfile的书写。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'echo "Hello World"'
                sh '''
                    echo "Multiline shell steps works too"
                    ls -lah
                '''
            }
        }
    }
}

Pipelines 由多个步骤(step)组成,允许你构建、测试和部署应用。 Jenkins Pipeline 允许您使用一种简单的方式组合多个步骤, 以帮助您实现多种类型的自动化构建过程。pipeline表示一个Pipelines,agent表示运行的环境,stage一个任务,steps表示任务的步骤,每个步骤内部就是一个单独的命令。

更多移步Jenkins执行多个步骤(step)

agent 指令告诉Jenkins在哪里以及如何执行Pipeline或者Pipeline子集,所有的Pipeline都需要 agent 指令。agent可以被多种方式定义,这里一般用docker,当执行Pipeline时,Jenkins将会自动运行指定的容器,并执行Pipeline中已经定义好的步骤steps。

另外pipeline中也可以使用环境变量,如下:

environment {
    DISABLE_AUTH = 'true'
    DB_ENGINE    = 'sqlite'
}

编写Jenkinsfile

在这里插入图片描述

在这里插入图片描述

stackoverflow

选择Manage:

在这里插入图片描述

选择Plugins:

在这里插入图片描述
选择Available plugins

在这里插入图片描述

安装如下插件

在这里插入图片描述

权限不足错误:
在这里插入图片描述

# 添加jenkins用户到用户组
sudo usermod -a -G docker jenkins

# 修改/var/run/docker.sock文件的权限
cd /var/run
chmod 777 docker.sock

写完pipline让jenkins构建即可。

pipeline {
    agent {
        docker {
            image 'maven:latest'
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Run JAR') {
            steps {
                sh 'java -jar target/hellojava.jar'
            }
        }
    }
}

CI/CD

在gitlab CI/CD中,构建自动化的一般步骤:

  1. 安装gitlab-runner,runner是实现CI/CD的关键,安装完runner配置gitlab连接,实现gitlab仓库与runner的连接,runner可以部署在任何服务器上。

  2. 编写.gitlab-ci.yml文件,在项目的根目录下创建.gitlab-ci.yml文件,定义CI/CD流程的各个阶段(如构建、测试、部署)以及相应的任务。runner就可以安装yml定义的步骤构建任务。

  3. git commit每次自动提交会自动出发Pipeline的执行任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的常见车型识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:在本博客中介绍了基于YOLOv8/v7/v6/v5的常见车型识别系统。核心技术采用YOLOv8,并融合了YOLOv7、YOLOv6、YOLOv5的算法优势,进行了细致的性能指标对比。详细介绍了国内外在常见车型识别方面的研究现状、数据集处理方法、算法原理、模型构…

Linux(centos) 安装GraalVM

文章目录 版权声明GraalVM 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。我在整理学习笔记的过程中尽力确保准确性&…

力扣-python-丑数

解答&#xff1a; class Solution:def isUgly(self, n: int) -> bool:if n < 0:return False# 将 n 依次除以 2、3、5&#xff0c;直到 n 不能再被这些因子整除while n % 2 0:n // 2while n % 3 0:n // 3while n % 5 0:n // 5return n 1class Solution:def isUgly(s…

手写简易操作系统(二十一)--硬盘驱动

前情提要 上面一节我们实现了 malloc 和 free 的系统调用&#xff0c;这一节我们来实现硬盘驱动。 一、硬盘分区 我们的文件系统安装在一块全新的硬盘中&#xff0c;我们先创建它&#xff0c;然后在给他分区。 1.1、创建硬盘 首先是创建&#xff0c;这个之前我们已经干过一…

《Git版本控制管理》笔记

第三章 git --version查看版本号git --help查看帮助文档裸双破折号分离参数 git diff -w master origin – tools/Makefile将当前目录或任何目录转化为Git版本库 git init 初始化之后项目目录中&#xff0c;有名为.git的文件git status 查看git状态git commit 提供日志消息和作…

Docker、Kubernetes之间的区别

比较容器化工具&#xff1a;了解 Docker、Kubernetes 在应用程序部署和管理方面的差异。 基本概述 Docker 是一个流行的容器化平台&#xff0c;允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API&#xff0c;使开发人员能够构建和管理容器化应用程…

【星海随笔】Ubuntu22.04忘记密码

服务器篇&#xff1a; 有问题可留言。 第一步 远程console界面进入该设备 并重启该设备 如果看到这个界面情况 则点击右上角按钮 【发送 CtrlAltDelete】 调出grub启动菜单 NOTE&#xff1a;启动的后半段去点击这个按钮&#xff0c;前半段一直点会一直重启 如果是直连服务器&a…

AI智能客服机器人是什么?对企业重要吗?

在数字化时代&#xff0c;客户服务是企业与客户建立牢不可破关系的重要桥梁。AI智能客服机器人&#xff0c;顾名思义&#xff0c;就是利用人工智能技术提升客户服务体验的自动化工具。今天&#xff0c;就让我们来揭开AI智能客服机器人的神秘面纱&#xff0c;并讨论它对企业的重…

增强Java技能:使用OkHttp下载www.dianping.com信息

在这篇技术文章中&#xff0c;我们将探讨如何使用Java和OkHttp库来下载并解析www.dianping.com上的商家信息。我们的目标是获取商家名称、价格、评分和评论&#xff0c;并将这些数据存储到CSV文件中。此外&#xff0c;我们将使用爬虫代理来绕过任何潜在的IP限制&#xff0c;并实…

Ollama教程——入门:开启本地大型语言模型开发之旅

Ollama教程——入门&#xff1a;开启本地大型语言模型开发之旅 引言安装ollamamacOSWindows预览版LinuxDocker ollama的库和工具ollama-pythonollama-js 快速开始运行模型访问模型库 自定义模型从GGUF导入模型自定义提示 CLI参考创建模型拉取模型删除模型复制模型多行输入多模态…

越南工厂连接中国总部服务器解决方案---案例分享

随着全球化的不断深入&#xff0c;许多中国企业走出国门&#xff0c;在世界各地设立分支机构和生产基地。然而&#xff0c;随之而来的是跨国网络通信的挑战。近期&#xff0c;客户越南的工厂与中国总部之间的网络连接出现了一些问题&#xff0c;这直接影响了企业的日常运营效率…

Go-Gin中优雅的实现参数校验,自定义错误消息提示

问题描述 在参数校验的时候我们一般会基于"github.com/go-playground/validator/v10"这个库给结构体加标签实现校验参数&#xff0c;当参数校验错误的时候&#xff0c;他的提示一般是英文的&#xff0c;怎么自定义参数错误提示呢&#xff1f;跟着我一步步来 注册校…

备战蓝桥杯---贪心刷题1

话不多说&#xff0c;直接看题&#xff1a; 本质是一个数学题&#xff1a; 我们令xi<0表示反方向传递&#xff0c;易得我们就是求每一个xi的绝对值之和min,我们令平均值为a爸。 易得约束条件&#xff1a; x1-x2a1-a,x2-x3a2-a..... 解得x1x1-0,x2x1-((n-1)*a-a2-...an)。…

硬件了解 笔记

motherboard的高低端区别在哪里&#xff1f; 核心&#xff1a;从单核变成双核&#xff0c;多核&#xff08;几核就是几个打工人&#xff09; 多线程&#xff1a;6核本来对应6个线程&#xff0c;但是多线程就是说6核对应12个线程 频率 主频&#xff1a;平时打工的速度 睿频&…

达梦数据库 优化

谁进行优化&#xff1f;优化什么&#xff1f; 优化不能仅从数据库方面考虑&#xff0c;比如&#xff0c;在存储达到数据库极限、应用涉及人员设计的代码稀巴烂的情况下&#xff0c;进行调优就是杯水车薪的效果。 涉及到优化人员&#xff1a; 数据库管理员应用程序架构师应用…

Javascript/Node.JS中如何用多种方式避免属性为空(cannot read property of undefined ERROR)

>>>>>>问题 "cannot read property of undefined" 是一个常见的 JavaScript 错误&#xff0c;包含我在内很多人都会遇到&#xff0c;表示你试图访问一个未定义&#xff08;undefined&#xff09;对象的属性。这通常是因为你在访问一个不存在的对象…

制造型企业实施WMS仓储管理系统前后的变化

在科技浪潮的推动下&#xff0c;WMS仓储管理系统逐渐崭露头角&#xff0c;成为制造企业优化运营、提升竞争力的得力助手。本文将从制造企业实施WMS仓储管理系统前后的对比入手&#xff0c;探讨这一变革所带来的深远影响。 一、WMS仓储管理系统实施前的仓储管理挑战 在WMS仓储管…

【LeetCode: 96. 不同的二叉搜索树 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

从0到1完成UI自动化测试框架搭建之Pytest

上篇文章中&#xff0c;我们学会了如何使用UI Automator2atx编写简单的Android自动化脚本。 但是有个问题&#xff0c;大家可以思考下&#xff0c;光用自动化脚本让它自己动起来&#xff0c;是不是缺了点什么&#xff1f; 我们写测试用例的时候&#xff0c;是不是经常写&…

redis 的StringRedisTemplate

6.3 StringRedisTemplate 尽管JSON的序列化方式可以满足我们的需求&#xff0c;但依然存在一些问题&#xff0c;如图&#xff1a; 为了在反序列化时知道对象的类型&#xff0c;JSON序列化器会将类的class类型写入json结果中&#xff0c;存入Redis&#xff0c;会带来额外的内存…