自动化运维CICD

news2025/7/5 14:13:36

目录

概述

为什么持续集成和发布可以提高效率

如何实现

1、在linux服务器安装部署代码仓库

2、安装jenkins

使用shell脚本实现CICD

使用pipeline实现CICD

使用Blue Ocean实现CICD


概述

持续集成(Continuous Integration,CI)和持续发布(Continuous Delivery,CD,又称持续交付)是经常放在一起提及的两个概念,专有词组CI/CD Pipeline 用来描述他们同时存在的持续集成与发布自动化管线。
持续集成是一种编程实践,它让开发团队通过实现对代码一系列小的改动,高频率地提交到版本管理源。现代程序需要依赖大量平台与工具链,需要一种行之有效的方式去反复确认每个改动的正确性。持续集成在技术上的目标是建立一个自动化、工序稳定一致的工作饰程。这种流程包括编译代码、打包编译输出,以及测试最终生成的结果。这种稳定一致并可以反复执行的流程,让开发人员可以更加频繁地提交改动,从而提升合作效率和代码质量。通过持续集成,团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发很大一部分都要归功于持续集成。

持续发布是在持续集成之后的一系列动作。持续发布自动化交付生成的产品到各个目标环境,如测试环境、审查环境和生产环境等,以用于不同的目的。除了生产环境外,多数的团队都会面对各种不同的环境,如开发人员使用的开发环境、测试人员使用的测试环境。持续发布可以保证各种修改以一种稳定、符合预期的方式交付到这些环境上。在发布的过程中,除了把持续集成的最终产物复制到目标环境外,持续交付通常还会跟外部的Web API、数据库和其他服务通信,让新的改动最终在目标环境生效。

为什么持续集成和发布可以提高效率

持续集成与发布有一套与之相伴的版本管理实践来指导团队之间的合作。而通过加入大量的自动化流程,持续集成与发布极大地减少了试错的成本和人为的错误。
1.更加高效的合作模式:持续集成作为一种实践,依赖于对工作流程的管理和自动化。当使用持续集成时,开发人员高频率地提交他们的代码到版本管理源中,有些团队甚至会对提交的频率作具体的要求,如每天一次。这种要求的原因是比起一大段需要数天甚至一个月写成的代码,一段段小规模的代码改动更容易定位质量问题。另外,通常代码是对整个团队的人开放的,如果开发人员的提交周期非常短,那么就可以避免出现多人共同编辑同一段代码,最终产生冲突的情况。当用户实现持续集成时,通常用户会从版本管理源的配置开始。虽然用户高频率地提交代码,但是一个新特性或者一段对错误的修复往往由多次代码提交组成,这些提交代码的时间跨度有长有短。团队需要通过版本管理和持续集成的结果来选择和判断哪些改动可以更新到生产环境。
        能对多个并行开发的特性实施有效管理的其中一种方式是版本管理系统中的分支管理。分支策略有很多种,其中之一被称为Git流程,它定义了一系列基于源码分支的合作流程,如新的代码应该放在什么分支,如何命名,如何合并入其他主干分支,如开发分支、测试分支和最终生产分支。对于需要长时间开发的特性,也会使用专门的副主干分支,用于其他更细小分支的并入。当一个新特性完整之后,这个新特性代表的分支将会被合并入主干分支。这种工作方式最大的挑战是当大量特性在并行开发的时候,如何管理这些分支的合并。
2.减少试错成本:在持续集成与发布的概念出现之前,对于代码的改动,开发人员需要自行把编译结果进行一系列的编译打包操作,在业内缺乏统一的指导思想去优化整体的流程。这些冗长的重复性劳动极大地打击了开发人员的积极性,开发人员从而倾向于一次性提交大量的代码,以减少测试和部署的频率。由于测试的频率降低了,一个错误往往要在更长的开发周期后才会被发现,这种“一次性提交大量的代码”的偏好反而又增加了开发人员的其他时间成本,被称之为试错成本。
3.减少人为错误:对于大量重复性的工作,在一些流程严谨的公司里,也许会通过详细的文档来描述每一个步骤应该如何正确地执行。但是这远远无法减少人为的错误。正如那句计算机领域的谚语“如果一个人工操作的步骤存在犯错的可能,那么它必然会有犯错的一天”。减少人为犯错的空间,与尽可能自动化一切是两个在工程领域相互关联、相互促进的主题。
        持续发布与集成,通过脚本和配置把所有的流程都完全自动化,最大限度地减少人为犯错的空间。而且由于整个流程稳定、可重复,对于流程或者具体脚本中出现的错误,用户都可以轻易对其进行改进和测试,而不会出现人们“随机犯错”的情况。

如何实现

1、在linux服务器安装部署代码仓库

持续集成需要一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,Gitlab是依赖于Git的远程代码仓库,类似于GitHub、Gitee,不同的是GitHub、Gitee的公网上代码仓库, Gitlab是可以私有化部署的免费远程代码仓库,官网:https://about.gitlab.com/

1、准备服务器
	10.0.0.7   gitlab  

2、下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm

3、安装GitLab
# 安装依赖包
[root@gitlab /opt]# yum install -y curl policycoreutils-python openssh-server perl
# 关闭防火墙
[root@gitlab /opt]# systemctl disable --now firewalld
# 关闭selinux
[root@gitlab /opt]# sed -i 's#enforcing#disabled#g' /etc/sysconfig/selinux
# 临时关闭
[root@gitlab /opt]# setenforce 0
# 安装
[root@gitlab /opt]# yum install gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm 
# 修改配置文件
[root@sean ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.7'
nginx['listen_port'] = 80
# 刷新配置(默认启动)
gitlab-ctl reconfigure

 安装后访问gitlab私库http://10.0.0.7/,创建用户组、用户及项目,其中组内成员有如下几种权限

1.Guest:可以创建issue、发表评论,不能读写版本库 
2.Reporter:可以克隆代码,不能提交,QA、PM 可以赋予这个权限 
3.Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限 
4.Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个 权限 
5.Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组 长可以赋予这个权限

2、安装jenkins

持续集成需要一个持续集成服务器, Jenkins 就是一个配置简单和使用方便的持续集成服务器。依赖于Java开发的,由各种组件组成的一个自动化部署工具。

Jenkins自由风格主要的部署步骤:参数化构建->源代码管理->构建->构建后操作

1、安装Java
[root@localhost opt]# yum install java-1.8.0-openjdk* -y

2、安装Jenkins
[root@localhost opt]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@localhost opt]# yum install -y jenkins-2.249.1-1.1.noarch.rpm
[root@localhost opt]# systemctl start jenkins

3、登陆密码
[root@localhost opt]# cat /var/lib/jenkins/secrets/initialAdminPassword
edfcd0f0432a4a868dc32da0c34f7f3a

4、安装插件
[root@localhost updates]# tar -xf /opt/plugins.tar.gz  -C /var/lib/jenkins/

5、Jenkins 优化
[root@localhost updates]# cd /var/lib/jenkins/updates
[root@localhost updates]# sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
[root@localhost updates]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

# 最后,系统管理 --> 插件管理 --> 高级,把站点升级改为国内插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 创建用户

创建权限组

 分配权限

由于jenkins构建项目中的源码是从git拉取,因此需要配置凭证方能拉取成功

  • 系统管理 --->  Manage Credentials ---> 系统凭证 ---> 全局凭证 ---> 添加凭证 ---> Username with Password(远程仓库的用户密码)
  • 系统管理 --->  Manage Credentials ---> 系统凭证 ---> 全局凭证 ---> 添加凭证 ---> ssh username with private key(需先在远程仓库设置中配置jenkins服务器公钥,再填入jenkins服务器私钥)

配置完后就可以拉取代码到工作目录,然后进行构建和发布,工作目录默认在/var/lib/jenkins/workspace

如果是发布maven工程,需要在jenkins服务器安装java,maven,并在全局工具配置java,在系统配置中配置maven,再安装maven集成插件

 

持续集成需要一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预,如下几种方式均可实现

使用shell脚本实现CICD

直接执行脚本,在jenkins服务器进行编译,在部署服务器进行发布,若批量部署,可以使用ansible

#!/bin/bash
set -xe
function process() {
  if [ $1 -ne 0 ]; then
    echo "deploy fail"
    exit 1
  fi  
}
echo "构建开始"
git checkout $GIT_TAG
mvn clean package -D skipTests
process $?
sshpass -p '部署服务器密码' scp target/*.jar root@10.0.0.7:/application
process $?
sshpass -p "部署服务器密码" ssh -o StrictHostKeyChecking=no root@10.0.0.7 "cd /application;chmod 777 *.jar;kill -9  `ps -ef|grep java|grep 8081|awk '{print $2}'`;nohup java -jar *.jar --server.port=8081>deploy.log &"
process $?
echo "deploy success"
set +x
echo "构建结束"

 

使用pipeline实现CICD

创建一个流水线

编写pipeline脚本

pipeline {
    agent any

    stages {
        stage('代码检出') {
            steps {
                echo 'Hello World'
            }
        }
        stage('编译构建') {
            steps {
                echo ' World'
            }
        }
         stage('上传制品') {
            steps {
                echo ' World'
            }
        }
    }
}

使用Blue Ocean实现CICD

 

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

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

相关文章

C/C++编译器配置——MinGW下载安装

一. 前言 由于重装Win11系统,所有配置环境需要重装,对于C/C编译器MinGW配置做一个简单记录。 VS code等软件只提供编辑器,不提供编译器,因此windows系统上的C/C编译器需要通过安装MinGW实现。 二. 安装过程 在MinGW官网下载安装…

元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”

导语:近期李晖和风语筑团队在深度探索“虚实结合”,布局元宇宙,谋求更多的创新。他受中国移动通信联合会元宇宙产业委员会委托,参与研究编撰《元宇宙十大技术》,并为该书做序《元宇宙:数字技术构建美好生活…

(十)延迟队列

延迟队列1. 延迟队列概念2. 延迟队列使用场景3. 整合Springboot4. TTL队列1. 代码架构图2.MQ组件配置文件类代码3. 消息生产者代码4. 消息消费者代码5. 延时队列优化1. 代码架构图2. 配置文件类代码3. 消息生产者代码6. Rabbitmq插件实现延迟队列1.安装延时队列插件2.代码实现7…

强强联合:OpenFeign 整合 Sentinel

书接前文: 微服务间的远程接口调用:OpenFeign 的使用 当项目中使用了 OpenFeign 后,可以很方便的进行远程服务调用,现在有个问题,假如远程服务出现故障了,调不了远程的接口,这边又着急等着返回…

系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)

1.让计算机知道系统被放在哪个设备上了(BIOS) 计算机启动先启动bios,再去读MBR,MBR动了才会启动操作系统 2.让计算机知道哪里的分区是活动分区(MBR),找出来把系统引导到这里来 这两部类似于早先游戏里的红色警报和星…

springcloud20:springcloudalibaba之Nacos

为什么会出现spring alibaba 整个Netflix项目进入维护模式(不会添加新功能) springcloud: Nerflix:eureka ribbon feign ruul config springcloud一些小技术和其整合 此时内部出问题 SpringCloud 吸收了springcloud alibaba 此时springcloud带了了什么呢…

【笔试强训】Day 3

🌈欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x…

python中pytest库用法详解

Pytest 是用于测试 Python 应用的 Python 库。 官方文档:Full pytest documentation — pytest documentation 安装: pip install pytest pytest 测试发现约定规范 如果未指定任何参数,则在testpaths(如果已配置)或…

智慧水利数字孪生案例分享:数字孪生水利,助力三峡科学防洪防汛

长江是我国第一大河流,长江流域在我国经济发展中,占据举足轻重的地位。与此同时,长江流域频繁的洪涝、气象灾害,严重影响危害着流域内经济社会发展和生态环境,因此长江流域防汛管理被作为我国防洪体系中的关键工程。水…

阿里大咖纯手写的微服务入门笔记,从基础到进阶直接封神

前言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的…

通讯/服务器公司 测试|测试开发 面试真题|面经 汇总

浪潮 测试开发 一面 8.24 三个面试官。一个HR,两个技术官。 1 为什么选择测开?意向工作地点。 2 软件质量模型 3 测试要做哪些测试 4 集成测试和验收测试的区别? 5 黑盒测试和白盒测试的理解 6 知道哪些黑盒测试和白盒测试的方法 7 手工测试…

【观察】“中国算力网”向全社会开放,意味着什么?

今天,算力的重要性已被提升到全新的高度,这是因为算力作为数字经济时代新的生产力,对推动科技进步、行业数字化转型以及经济社会发展都发挥着至关重要的作用。根据中国信通院发布《中国算力发展指数白皮书(2022年)》显…

AE插件:流体渐变着色特效动画生成 Potok mac

Potok是After Effects的流体渐变插件。它会产生噪波并使用渐变对其进行着色。可以从UI Gradient Control或任何图层设置渐变。噪波可以用任何层掩盖。 Noise噪波:Potok 插件有一个内置的噪音发生器,有四种噪音类型。噪声动画可以无缝循环。此外&#xf…

ASM3142 USB 3.1控制芯片_ ASM3242 USB 3.2 2x2 控制器

一、ASM3142 USB 3.1控制芯片 ASM3142 USB 3.1控制芯片将成为通过USB进行快速数据传输的新标准。是全球最快的USB解决方案, 可提高性能并实现更高的功效,节省高达50%的功耗。 与ASM 2142 USB控制芯片相比,新的ASM 3142超高速USB控…

pandas数据分析:pandas基础函数入门教程【w3school学习笔记】

系列文章目录 pandas数据分析:十分钟快速入门重点函数速查 文章目录系列文章目录前言一、Pandas作用二、数据结构2.1 Series2.2 DataFrame三、读取数据3.1 读取CSV文件数据3.2 读取JSON文件数据四、分析数据五、清洗数据5.1 空值5.1.1 删除包含空值的行5.1.2 填充空…

微信群发工具,纯Python编写~

前言 接到了一个需求:现微信有8000好友,需要给所有好友发送一则一样的消息。网上搜索一番后,发现uiautomation 可以解决该需求,遂有此文。这是第五篇,也是最后一篇。 正如上面所见,这是uiautomition 微信群…

web前端期末大作业——网页制作基础大二dw作业——动画漫展学习资料电影模板(6页)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

「MySQL高级篇」MySQL存储引擎

本篇速览 早在MySQL基础篇的学习中,我们就一直看到innodb这个存储引擎,但是好像对于其他的存储引擎也没有去学习和了解,而innodb有何种特点也不得而知,而本篇将从一下四点,带你逐一攻破Ta: 1️⃣首先系统地…

golang 使用 make 创建 map 是否需要指定长度

大家都知道可以使用make方法来创建map类型,对比创建 slice 类型,创建map是否也需要指定len和cap两个参数呢? 如果map要容纳的数据比较多,其实是需要指定len属性的,我们可以从创建map的源码中了解到(本文都…

kubernetes(K8S)学习笔记P5:K8s核心概念2

kubernetes(K8S)学习笔记P4:K8s核心概念2-Helm、持久化存储技术5.Helm5.1Helm 引入5.2Helm 介绍5.3Helm v3 变化5.4安装与仓库配置5.4.1部署 helm 客户端5.4.2配置国内 chart 仓库(helm换源)5.5Helm快速部署5.5.1基本命…