云原生(六)、CICD - Jenkins快速入门

news2024/12/26 9:28:09

Jenkuns快速入门

一、CICD概述

CICD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写。它是软件开发中的一种流程和方法论,旨在通过自动化的方式频繁地将代码集成到共享存储库中,并自动部署到生产环境中。

  • 持续集成(Continuous Integration):开发者将代码频繁地合并到共享存储库中,然后自动运行测试以确保代码的质量和稳定性。这有助于发现和解决潜在的问题,并促使开发团队保持代码库的健康状态。

  • 持续部署(Continuous Deployment):一旦代码通过了持续集成的测试,并且达到了部署到生产环境的标准,就可以自动地将代码部署到生产环境中,以供最终用户访问和使用。这可以大大减少发布新功能或修复bug的时间,提高交付速度。

传统软件开发流程:

1、项目经理给你们分配模块开发任务给开发人员(项目经理-开发)

2、每个模块单独开发完毕(开发),单元测试(测试)

3、开发完毕后,集成部署到服务器(测试、运维)

4、测试出现问题,提交bug,开发继续修复bug(开发)

5、bug修改完毕,继续提交测试…

问题:

1、模块之间依赖负载,集成部署经常出问题

2、测试人员经常在等待…

3、按时交付也会出问题

思考:

1、测试时间能否提前(开发一提交代码,问题就能直接暴露出来:自动化测试)

2、人工集成部署(能否使用自动化工具构建)

持续集成

持续集成的好处:

1、自动化集成部署,提高了集成效率。

2、更快的修复问题。

3、更快的进行交付。

4、提高了产品质量。

DevOps

DevOps是一种软件开发和IT运维(Operations)的方法论或文化。它旨在通过改进开发团队和运维团队之间的沟通、协作和集成,以实现更快、更可靠的软件交付。DevOps强调自动化、持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续部署(Continuous Deployment)等实践,以便将软件的开发、测试和部署过程整合到一个无缝的流程中。通过DevOps实践,团队可以更快地响应用户需求,更快地交付软件,并且更容易地应对市场变化和技术挑战。

二、GitLab安装使用

1、安装
# 拉取镜像
docker pull gitlab/gitlab-ce

#创建目录
mkdir -p /home/gitlab/etc
mkdir -p /home/gitlab/data
mkdir -p /home/gitlab/logs

#启动容器
docker run --name="gitlab" -d --hostname=139.9.199.4 -p 4443:443 -p 8888:80 -p 8022:22 -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/data:/var/opt/gitlab -v /home/gitlab/logs:/var/log/gitlab --privileged=true gitlab/gitlab-ce:latest

#查看启动日志
docker logs -f gitlab

#配置修改
#cd /home/gitlab/etc/gitlab.rb
external_url 'http://139.9.199.4'

# /home/gitlab/data/gitlab-rails/etc/gitlab.yaml

#查看初始密码
cat /home/gitlab/etc/initial_root_password

Password: BjIDRuFBLJpw8RqsbR//VOBAOYkE4nu0eN7mM/FLLJs=

使用用户名root+上面获得的密码登录
请添加图片描述
请添加图片描述
登录成功后先修改密码,初始密码只保留24h

2、使用

直接像使用git一样使用

yum update -y
yum install git -y
git version

由于centos停止维护,安装git时,镜像源的安装存在问题。解决方案

#克隆项目
 git config --global user.name "Administrator"
 git config --global user.email "admin@exmple.com"
 git config --global credential.helper store
 
 git clone http://139.9.199.4:8888/root/base-test.git
 cd base-test
 touch README.md
 git add .
 git commit -m "update"
 git push -u origin main

三、Jenkins

中文官方文档
Jenkins是一个开源的持续集成(CI)和持续部署(CD)工具,用于自动化软件开发过程中的构建、测试和部署。它允许开发团队在一个可视化的界面中设置和管理工作流程,以确保代码的频繁集成和部署。

Jenkins的主要功能包括:

  1. 持续集成:Jenkins可以定期或在代码提交时触发构建过程,自动编译源代码、运行测试并生成构建报告。

  2. 持续部署:通过Jenkins可以设置自动化的部署流程,一旦代码通过了测试,就可以自动部署到生产环境中。

  3. 插件生态系统:Jenkins具有丰富的插件生态系统,使得它可以与各种不同的工具和技术集成,如版本控制系统(如Git、SVN)、构建工具(如Maven、Gradle)、测试框架(如JUnit、Selenium)等等。

  4. 可扩展性:Jenkins是一个可扩展的平台,可以根据具体的需求定制和扩展功能。

  5. 可视化界面:Jenkins提供了直观的用户界面,使得用户能够轻松地查看和管理构建和部署任务。

Jenkins是一个强大而灵活的工具,可以帮助开发团队实现持续集成和持续部署,从而提高软件交付的质量和效率。

1、使用docker安装jenkins
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean 
  • 根据提示获取登录密码
 cat /var/jenkins_home/secrets/initialAdminPassword

请添加图片描述

  • 安装推荐插件

安装前,需要更换配置文件中的外网访问地址

#进入目录  cd /var/jenkins_home/updates
#替换default.json的外网地址
sed -i 's/https:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

修改完成后开始安装请添加图片描述

  • 部分插件安装成功,直接继续,填写信息。保存并完成
    请添加图片描述
  • 不要重启,直接刷新页面,重启容器会挂掉
    请添加图片描述
2、安装插件 gitlab docker

请添加图片描述

3、纠正未成功安装的插件

请添加图片描述
纠正完成后重启容器即可。

四、JenKins使用

1、使用案例: Hello-JenKins

新建流水线项目,添加脚本

//最外层的 pipeline
pipeline {
//agent环境
	agent {docker 'maven;3.3.3'}
	//步骤的集合
	stages {
	//分步骤
		stage('build'){
      steps{
        sh 'mvn --version'
      }
		}
		
		stage('Test'){
      steps{
        sh 'echo "test"'
      }
		}
	}
}

通过菜单栏的 Blue Ocean查看具体信息。请添加图片描述

2、超时重试

开发与测试常用到的命令。retry、timeout

pipeline {
	agent any
	stages {
		stage('build'){
      steps{
      	retry(3){
      		sh './start.sh'
      	}
      	
      	timeout(time:3,unit:'MINUTES'){
      		//未来会有许多的测试脚本
      		sh './health-check.sh'
      	}
      }
		}
		
	}
}
3、钩子函数

生命周期函数,当pipeline执行到某一个步骤时,做一些特殊的事件。post

pipeline {
	agent any
	stages {
		stage('TEST'){
      steps{
      	retry(3){
      		sh ‘echo "fail";exit 1'
      	}	
      }
		}
		post {
			always {
				echo 'always'
			}
			success{
				echo 'success'
			}
			failure{
				echo 'failure'
			}
			unstable{
				echo 'unstable'
			}
			changed{
				echo 'changed'
			}
		}
	}
}
4、定义执行环境

您可能已经注意到每个示例中的 agent指令。agent 指令告诉jenkins在哪里以及如何执行Pipeline或者Pipeline子集。正如您所预料的, 所有的Pipeline都需要 agent 指令,
在执行引擎中,指令会引起以下操作的执行:

  • 所有在块block中的步骤steps会被]enkins保存在一个执行队列中。 一旦一个执行器 executor 是可以利用的,这些步骤将会开始执行。

  • 一个工作空间 workspace 将会被分配,工作空间中会包含来自远程仓库的文件和一些用于Pipelin的工作文件

  • 工作目录为 /var/jenkins_home/workspace

在Pipeline中可以很容易的运行 Docker 镜像和容器。 Pipeline可以定义命令或者应用运行需要的环境和工具,不需要在执行代理中手动去配置各种各样的系统工具和依赖。 这种方式可以让你使用 Docker容器工具包 中的任何工具

pipeline {
	agent any
	stages {
		//执行步骤
		
		dockerfile
		docekrcompose
		shell
		其他程序的相关命令
		。。。
	}
}

例子

pipeline {
	agent {
		docker {image 'node:7-alpine'}
	}
	stages {
		//执行步骤
		stage('TEST'){
			steps {
				sh 'node --version'
			}
		}
	}
}

请添加图片描述

5、环境变量

配置全局的环境变量environment。这个配置在所有的step中都可以使用。

pipeline {
	agent any
	environment {
		DB_PSD = '123456'
		DB_ENGINE = 'sqlite'
	}
	stages {
		//执行步骤
		stage('Build'){
			steps {
				sh 'printenv'
			}
		}
	}
}	

请添加图片描述

6、多步骤
pipeline {
	agent any
	environment {
		DB_PSD = '123456'
		DB_ENGINE = 'sqlite'
	}
	stages {
		//项目构建
		stage('Build'){
			steps {
				//git、dockerfile等构建工作。。。
				echo 'Build'
			}
		}
		//项目测试
		stage('Test'){
			steps {
			//shell测试、web测试、压测。。。
				echo 'Test'
			}
		}
		//部署
		stage('Deploy'){
			steps {
			//访问、集群、分布式。。。
				echo 'Deploy'
			}
		}
		
	}
}

会产生多个步骤的进程任务,方便管理与排查
请添加图片描述

7、人工确认

人工确认后,完成上线发布的工作。input

pipeline {
	agent any
	environment {
		DB_PSD = '123456'
		DB_ENGINE = 'sqlite'
	}
	stages {
		//项目构建
		stage('Build'){
			steps {
				//git、dockerfile等构建工作。。。
				echo 'Build'
			}
		}
		//项目测试
		stage('Test'){
			steps {
			//shell测试、web测试、压测。。。
				echo 'Test'
			}
		}
		
		//人工确认
		stage('isSure'){
			steps {
				input "是否确认发布上线"
			}
		}
		
		//部署
		stage('Deploy'){
			steps {
			//访问、集群、分布式。。。
				echo 'Deploy'
			}
		}
		
	}
}

请添加图片描述
请添加图片描述

五、WebHook触发器

通过以上的步骤。我们有了自己的gitlab,也学会了jenkins的CICD。现在,我们想做的是,一旦我的代码提交,jenkins就自动触发服务更新。

首先关闭防火墙,使容器之间互通! system stop firewalld

1、构建触发器,自动触发构建!有一个webhook触发器!

逻辑:提交代码后,jenkins能够感知到代码提交了,流水线工程(项目打包,构建镜像,运行容器,测试接口,人工确认,部署上线)就自动执行

2、创建一个jenkins流水线。配置gitlab的触发器,生成Secret token请添加图片描述
在gitlab的项目中设置项目的webhook请添加图片描述
成功后,可以在项目中看到多出一个钩子请添加图片描述
测试

通过gitlab钩子中的测试push操作,会发现jenkins自动触发了构建。并且描述为Started by GitLab push by Administrator请添加图片描述
请添加图片描述

六、官方流水线项目

官方文档 :https://www.jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/

1、clone 仓库到本地,然后推倒我们自己的gitlab中

git clone https://github.com/jenkins-docs/simple-java-maven-app.git

2、重复上一小节webhook的内容,实现一个流水线工程。

3、添加脚本代码时,不需要再自己编写,直接使用仓库中的jenkins脚本,指定jenkinsfile文件的路径。

4、添加jenkins脚本的git地址时,会出现权限问题,需要在jenkins全局配置中添加gialab的token凭证。

#jenkins脚本文件的内容
pipeline {
    agent {
        docker {
            image 'maven:3.9.0'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deliver') {
            steps {
                sh './jenkins/scripts/deliver.sh'
            }
        }
    }
}

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

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

相关文章

面试题 之 webpack

1.说说你对webpack理解?解决什么问题? Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一…

将jupyter notebook文件导出为pdf(简单有效)

1.打开jupyter notebook笔记: 2.点击file->print Preview 3.在新打开的页面右键打印 4.另存为PDF 5.保存即可 6.pdf效果 (可能有少部分图片显示不了) 网上也有其他方法,比如将其转换为.tex再转为PDF等,但个人觉…

Maplesoft Maple 2024数学软件中文安装 Maple2024 Mac下载

Maplesoft Maple for Mac 是一款功能强大、易于使用的数学计算软件,适用于各种科学计算场景。无论是教学、科研还是工程设计,它都能为用户提供有力的支持。 Maple2024 Mac中文破解补丁 Windows版:点此下载 Maple 2024 mac破解教程 打开镜像…

学习可视化比较好用的网站Apache ECharts

Apache ECharts 是一个基于 JavaScript 的开源可视化图表库,它提供了直观、交互丰富且可高度个性化定制的数据可视化图表。这个库最初由百度团队开源,并在 2018 年初捐赠给了 Apache 基金会,成为 ASF 的孵化级项目。在 2021 年 1 月 26 日&am…

Java常见限流用法介绍和实现

目录 一、现象 ​编辑 二、工具 ​​​​​​1、AtomicInteger,AtomicLong 原子类操作 ​​​​​​2、RedisLua ​​​​​​3、Google Guava的RateLimiter 1) 使用 2) Demo 3) 优化demo 4、阿里开源的Sentinel 三、算法 1、计数…

光伏百科|分布式光伏电站如何开展运维管理工作?

随着经济的不断发展和生活水平的日益提高,节能环保已经成为全社会的责任和共识,分布式光伏电站作为清洁能源走进了千家万户。然而,在分布式光伏电站运行期间,面临监管困难、系统繁多、火灾隐患和运维不当等困难,该如何…

gopher伪协议

基础知识 基本格式 基本格式&#xff1a;URL:gopher://<host>:<port>/<gopher-path>web也需要加端口号80gophert协议默认端口为70gopheri请求不转发第一个字符 get请求 问号&#xff08;&#xff1f;)需要转码为URL编码&#xff0c;也就是%3f回车换行要变…

Patchwork包使用教程,R语言快速组合拼接图片

R语言如何拼接多幅图片&#xff1f; 今天分享的笔记带你领略R语言Patchwork包独特的魅力&#xff0c;patchwork是一个非常流行的用于拼接 ggplot2 图形的包&#xff0c;以一种简单的方式对图形进行排列和组合&#xff0c;不论多复杂的组合图形&#xff0c;都能确保图形之间正确…

社交革命:Facebook如何塑造数字社交的未来

引言 在当今数字化时代&#xff0c;社交媒体已成为人们生活的核心&#xff0c;而Facebook作为其中的领军者&#xff0c;一直在塑造着数字社交的未来。本文将深入探讨Facebook在数字社交领域的地位、影响力以及对未来社交的塑造作用&#xff0c;为读者揭示这场社交革命如何由Fa…

Windows直接运行python程序

Windows直接运行python程序 一、新建bat脚本二、新建vbs脚本 一、新建bat脚本 新建bat批处理脚本&#xff0c;写入以下内容 echo off call conda activate pytorch python app.pyecho off&#xff1a;在此语句后所有运行的命令都不显示命令行本身&#xff0c;但是本身的指令是…

【软件开发】给Ubuntu 18.04虚拟机安装最新的Python 3.12.2

一、前言 笔者在Windows 11主机上安装有Ubuntu 18.04虚拟机&#xff08;使用虚拟化平台Oracle VM VirtualBox&#xff09;&#xff0c;在Python3.6的使用过程中遇到了问题&#xff0c;决定安装Python 3.12.2&#xff0c;在此记录安装过程。 二、安装过程&#xff08;在Ubuntu…

鸿蒙HarmonyOS应用开发之使用Node-API实现跨语言交互开发流程

使用Node-API实现跨语言交互&#xff0c;首先需要按照Node-API的机制实现模块的注册和加载等相关动作。 ArkTS/JS侧&#xff1a;实现C方法的调用。代码比较简单&#xff0c;import一个对应的so库后&#xff0c;即可调用C方法。 Native侧&#xff1a;.cpp文件&#xff0c;实现模…

持续集成与版本控制的相关概念

目录 一、持续集成 1.1 持续集成基本概念 1.1.1 持续集成的含义 1.1.1.1 持续集成流程是依赖产品版本迭代和版本分支而产生的 1.1.1.2 持续集成流程中包含的内容 1.1.2 传统打包模式说明 1.1.2.1 传统打包模式概述 1.1.2.2 传统打包模式问题 1.1.3 持续集成模式 1.1.…

FFmpeg初步了解

一、了解FFmpeg 1.1 什么是FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证…

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注&#xff1a;本文来自Flexera2024年的云现状调研报告的翻译。原报告地址&#xff1a; https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司&#xff0c;有30年发展历史&#xff0c;5万名客户&#xff0c;1300名员工。Flex…

备考ICA----Istio实验10---为单个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

mac-git上传至github(ssh版本,个人tokens总出错)

第一步 git clone https://github.com/用户名/项目名.git 第二步 cd 项目名 第三步 将本地的文件移动到项目下 第四步 git add . 第五步 git commit -m "添加****文件夹" 第六步 git push origin main 报错&#xff1a; 采用ssh验证 本地文件链接公钥 …

【机器学习300问】53、什么组合特征?为什么要组合特征?

一、什么是组合特征&#xff1f; 组合特征是指在机器学习通过将两个或多个基础特征进行某种形式的结合而创建的新特征。这些新特征是描述数据的新视角&#xff0c;这有助于模型发现和学习数据中更复杂的模式。 例如&#xff0c;在广告点击预测问题中&#xff0c;我们有两个基础…

协程库-锁类-实现线程互斥同步

mutex.h&#xff1a;信号量&#xff0c;互斥锁&#xff0c;读写锁&#xff0c;范围锁模板&#xff0c;自旋锁&#xff0c;原子锁 锁 **锁不能进行拷贝操作&#xff1a;**锁是用于管理多线程并发访问共享资源的同步原语。这些锁包括互斥锁&#xff08;mutex&#xff09;、读写锁…

数仓建设实践——58用户画像数仓建设

目录 一、数据仓库&用户画像简介 1.1 数据仓库简介 1.2 数据仓库的价值 1.3 用户画像简介 1.4 用户画像—标签体系 二、用户画像数仓建设过程 2.1 画像数仓—背景&现状 2.2 画像数仓—整体架构 2.3 画像数仓—研发流程 2.4 画像数仓—指标定义 2.5 画像数仓…