当前位置: 首页 > news >正文

Jenkins笔记(一)

个人学习笔记(整理不易,有帮助点个赞)

笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客

目录

一:简单了解

二:什么是DevOps

三:安装Jenkins

四:pipeline

1)简单了解

2)Jenkinsfile

3)pipeline语法选择

1:脚本式(Scripted)语法

2:声明式(Declar-ative)语法(建议使用这种)

4)创建pipeline项目

5)从版本控制库拉取pipeline

6)使用Maven构建Java应用


一:简单了解

Jenkins2.0版本,开始支持pipeline as code

Jenkins是一款使用Java语言开发的开源的自动化服务器。我们通过界面或Jenkinsfile告诉它执行什么任务,何时执行。理论上,我们可以让它执行任何任务,但是通常只应用于持续集成和持续交付

二:什么是DevOps

参考:百度安全验证

 简单理解就是:

1)定义:DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合,通过自动化软件交付和架构变更的流程,使得构建、测试、发布软件能够更加快捷、频繁和可靠

2)软件工程方法论从瀑布到敏捷,到目前的DevOps,都不是凭空演进出来的。敏捷的目的是为了打破产品和开发团队之间的部门墙,但是市场变化越来越快,充满易变性、不确定性、复杂性、模糊性。我们需要更快的交付和反馈,所以只打破产品和开发部门部门墙还不够,现在现在需要将开发和运维运营也打通

目的:DevOps打破原有的组织考核壁垒,围绕一个统一的业务价值目标及业务交付范围加强沟通,通过频繁、快速地迭代交付和反馈,达到加快交付速度和提高交付质量的目的

3)方法:用持续交付的流水线来取代冗长的开发运维流程,就会用到jenkins了

4)DevOps的生命周期:

5)实现

DevOps落地,研发交付的每个过程都离不开工具的支撑。传统的方式,是自己搭建零散的弱整合工具系统,比如我们用Gitlab来管理代码,根据企业的实际情况寻找合适的分支管理方法;我们用Jenkins来做持续集成;使用selenium来做自动化测试;使用ansible来自动化部署;使用chef或者puppet来管理基础环境等等。这种情况的问题一是系统完全需要自己维护,成本高,不稳定;问题二是子系统之间存在隐性墙,缺少数据共享/权限共享/系统交互等功能。目前大型金融以及互联网企业普遍采用强整合的统一DevOps平台

三:安装Jenkins

参考:Windows

下载地址:Jenkins download and deployment 

配置策略组

这里的对象名称是我电脑的账户名,输入后,点击检查名称,他会给你生成一串,然后保存应用即可

安装下载的软件,在这里输入,我先安装,此前没配置策略组,配置后这里没有自动生成,直接就返回上一步就好了

端口我用的8081,正常用8080就行

选择需要与Jenkins一起安装的其他服务,然后单击“下一步”

安装完成后,查看服务已经开启了

浏览器输入http://localhost:8081/,登录即可

首次访问新的 Jenkins 实例时,系统会要求您使用自动生成的密码解锁它

也可以从安装路径找密码

四:pipeline

1)简单了解

部署流水线(Deployment pipeline)是指从软件版本控制库到用户手中这一过程的自动化表现形式

Jenkins 1.x只能通过界面手动操作来“描述”部署流水线

Jenkins 2.x支持pipeline as code,可以通过“代码”来描述部署流水线

2)Jenkinsfile

Jenkinsfile是一个文本文件,是部署流水线概念在Jenkins中的表现形式。像Dockerfile之于Docker。所有部署流水线的逻辑都写在Jenkinsfile中

如果没有pipeline插件,就去插件管理安装一个

我这里已经安装了

3)pipeline语法选择

Groovy语言被选择作为基础来实现pipeline

1:脚本式(Scripted)语法

node为根节点的是脚本式语法

node{stage('Build'){//执行构建}stage('Deploy'){try{//执行部署}catch(err){XXXthrow err}}}

2:声明式(Declar-ative)语法(建议使用这种)

pipeline {	agent anystages {stage('Build') {steps{ echo 'Build' }}stage('Test') {steps { echo 'Test' }}}post{always{echo "阶段完成后动作"}}
}

pipeline插件从2.5版本开始,才同时支持两种格式的语法

只有安装了pipeline插件,Jenkins才支持pipeline as code。这个“code”被写在一个被命名为Jenkinsfile的文本文件中。在同一个代码项目下可以按需创建多个不同名的Jenkinsfile

4)创建pipeline项目

随便写一个pipeline

从Jenkins界面填入pipeline,在验证时可以这么做,但是不推荐,因为不能做到pipeline的版本化

5)从版本控制库拉取pipeline

安装Git插件,然后使用SSH的clone方式拉取代码

将Git私钥放到Jenkins上,这样Jenkins才有权限从Git仓库拉取代码

注意:gitlab这里添加的是公钥pub那个(github也是差不多的)

在jenkins配置私钥,打开凭证管理

用户名和密码是gitlab代码库登录的账号密码

注意,这里的秘钥填的是私钥

随便创建一个项目,把gitlab的项目地址在这里设置一下,如图下:

运行结果(在执行如果出现报错,不确定是不是地址有问题,可以在git先执行一次)

最初我拿github去操作的时候,报错

ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.

直接把master改为main就好了

上面已经知道Jenkins从Git仓库怎么拉取代码了,接下来是在拉代码的时候,执行pipeline

项目新建一个Jenkinsfile文件,然后填上以下内容,推送去仓库

流水线配置一下仓库地址,凭证,文件名

这里吃个亏,我开始创建的是带txt后缀,但是这里没加,导致找不到文件

“Script Path”就是pipeline的文件名,默认是Jenkinsfile

6)使用Maven构建Java应用

参考:idea创建一个简单的maven项目-CSDN博客

使用Maven构建Java应用的例子,Jenkins默认支持Maven

在Jenkins上安装JDK和Maven,可以本地也可以自动,我这里选择的是本地

pipeline {agent any//执行到tools时,就会根据Maven的设置自动下载指定版本的Maven,并安装//tools是pipeline中的一个指令,用于自动安装工具,同时将其路径放到PATH变量中tools {maven 'mvn-3.9.6'}stages {stage('Build') {steps {sh "mvn clean package spring-boot:repackage"    //暂时不理解这个有什么作用sh "printenv"    //将环境变量打印到console中}}}
}

推送仓库,构建一个pipeline,执行后会安装maven(这里的例子只是说明通过构建去安装maven,跟我本地配置没啥关系)

相关文章:

  • openssl3.2 - exp - AES-256-GCM
  • 解密Lawnchair:打造个性化极致的Android桌面体验
  • 根据标准化开发流程---解析LIN总线脉冲唤醒的测试方法和用例设计思路
  • python和nodejs一键安装当前项目所有依赖
  • C语言之指针习题一
  • MySQL常见面试题
  • SpringBoot集成Kafka
  • SMT贴片加工——品质检验要求
  • 手机app制作商用系统软件开发
  • 2024【问题解决】Github 2024无法克隆git clone自从签了2F2安全协议之后
  • 数据结构--堆
  • CryoEM - 使用 cryoSPARC 基于单颗粒图像从头重构蛋白质三维结构
  • 在PG或HGDB上启用块校验checksum
  • 男人的玩具系统wordpress外贸网站主题模板
  • ANTLR4规则解析生成器(三):遍历语法分析树
  • axios 和 cookie 的那些事
  • Create React App 使用
  • Java精华积累:初学者都应该搞懂的问题
  • JAVA之继承和多态
  • JS题目及答案整理
  • PHP那些事儿
  • React 快速上手 - 07 前端路由 react-router
  • Spring Boot MyBatis配置多种数据库
  • underscore源码剖析之整体架构
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 计算机在识别图像时“看到”了什么?
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 悄悄地说一个bug
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我的业余项目总结
  • 学习JavaScript数据结构与算法 — 树
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #pragma data_seg 共享数据区(转)
  • (待修改)PyG安装步骤
  • (二十三)Flask之高频面试点
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (九)c52学习之旅-定时器
  • (转)德国人的记事本
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Core引入性能分析引导优化
  • .NET delegate 委托 、 Event 事件
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net开发时的诡异问题,button的onclick事件无效
  • @private @protected @public
  • @Transactional类内部访问失效原因详解
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [c语言]小课堂 day2
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [HDU3710]Battle over Cities
  • [JavaScript] JavaScript事件注册,事件委托,冒泡,捕获,事件流
  • [Java安全入门]三.CC1链
  • [LeetCode 687]最长同值路径
  • [LeetCode] 93. Restore IP Addresses 复原IP地址