技术标签: 云原生 devops 云原生/云计算 - 入门到实战 jenkins 开发工具/开发语言 云计算
目录
持续集成(Continuous Integration,CI)。随着软件开发复杂度的不断提高,如何更好的协同开发以确保软件开发质量已经成为了开发团队所追求的目标,特别是近年来 “敏捷开发” 在互联网领域的兴起,如何能够在不断变化的需求中快速适应和保证开发质量显得尤为重要。
持续集成就是针对这类问题的一种软件开发实践,倡导团队必须经常集成他们的工作,而每次的集成都是通过自动化的构建来验证的,包括自动编译、发布、测试,从而更快发现集成错误,让团队更快的开发内聚的软件。
持续集成具有以下特点:
- 是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试,再到结果记录、测试统计等都是自动完成,无需人工干预
- 需要有专门的集成服务器来执行集成构建
- 需要有代码托管工具支持
持续集成的出现,保证开发团队交代码的质量,减轻了软件发布时的压力;其次就是全程自动完成,无需太多人工干预,极大的减少了重复的过程,节省了时间、工作量和成本。
Jenkins 原名 Hudson,2011 年修改为 Jenkins,它是一个开源的实现软件持续集成的工具。官网地址如下(也有中文网址):
Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还可以用图表的形式形象的展示项目构建的趋势和稳定性。
Jenkins 具有以下特点:
- 易安装:官网下载直接运行
- 易配置:提供了友好的 GUI 配置界面
- 变更支持:能从代码仓库中获取并产生代码更新列表,输出到编译输出信息
- 支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 界面的链接地址是永久的,可在任何文档中直接使用
- 集成 E-mail/RSS/IM
- JUnit/Test NG 测试报告:以图表形式提供测试报告
- 文件指纹信息:会保存哪次集成构建产生了哪些 jars 文件,哪次集成使用了哪个版本的 jars 文件等记录
- 支持第三方插件
第一步,下载 Jenkins 安装包,打开Jenkins 官方文档;
点击 “Installing Jenkins”,可以看到可供下载的各个版本;
选择 Linux(演示虚拟机为 CentOS 系统)下的 CentOS 系统;
可以看到官方提供的在线安装方式;
打开 Xhell 并连接虚拟机/服务器,按照以下步骤进行下载;
# 下载镜像
wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 安装
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
# 更新
yum upgrade
# 安装 Java 环境
yum install java-11-openjdk
#安装 Jenkins
yum install jenkins
Jenkins 安装完成之后,就可以使用 虚拟机/服务器IP:端口 在本地进行访问了,初始界面如下;
根据提示密码存于 /var/lib/jenkins/secrets/initialAdminPassword 目录中;
输入密码后进入如下界面;
我们选择安装推荐的插件,Jenkins 便会开始自动下载安装,如下正在安装;
安装完成后,创建我们的第一个用户;
进入 Jenkins 主页如下;
使用推荐安装方式只能帮我们安装一部分最为常用的插件,有某些插件如 maven 等还是需要我们手动去安装的。
点击 “系统管理” --> “插件管理”;
在这里可以看到我们需要的插件,按需下载即可;
# rpm卸载Jenkins
rpm -e jenkins
# 检查是否卸载成功
rpm -ql jenkins
# 彻底删除残留文件
find / -iname jenkins | xargs -n 1000 rm -rf
全局配置的目的在于告诉 Jenkins 各种工具的路径在何处,使得 Jenkins 能够通过插件来调用这些软件。我们这里均采用下载压缩包然后上传虚拟机/服务器的方式进行演示。
点击“系统管理” --> “全局配置”,可以看到需要配置的插件,需要配置的有 jdk、git、maven 工具;
(直接使用 yum 命令安装虽然更为简单但版本会很低,为防止今后报错所以推荐此方式安装)
首先下载 git 压缩包并上传至虚拟机/服务器;
按照以下步骤进行操作;
#1.解压压缩包
tar -zxvf git-2.27.0.tar.gz
#2.在Linux系统中是需要编译源码的,首先下载所需要的依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
#3.卸载旧版本的 git(安装依赖是会自动安装 git,所以需要卸载旧版本)
yum -y remove git
#4.进入解压后的文件夹
cd git-2.27.0
#5.编译git源码
make prefix=/usr/local/git all
#6.安装git至/usr/local/git路径
make prefix=/usr/local/git install
#7.配置环境变量
vi /etc/profile
在底部加上该行代码:export PATH=$PATH:/usr/local/git/bin
#8.配置完成后刷新环境变量
source /etc/profile
操作完成之后使用命令 git --version 查看 git 版本,如下 2.27 版本安装成功;
[root@192 git-2.27.0]# git --version
git version 2.27.0
此时我们查看一下 git 路径 which git;
[root@192 git-2.27.0]# which git
/usr/local/git/bin/git
使用该路径设置全局配置;
下载一个 jdk 的 rpm 包并上传至虚拟机/服务器;
然后使用命令 rpm -ivh jdk-8u171-linux-x64.rpm 进行安装;
安装后的根目录为 /usr/java/jdk1.8.0_171-amd64;
使用此路径设置全局;
下载 apache-maven .tar.gz 包并上传至虚拟机/服务器;
解压压缩文件;
使用此路径及解压后的文件名设置全局;
全部配置完成之后,点击保存、点击应用。
Gogs 是一款极易搭建的自助 Git 服务,它的目标在于打造一个最简单、快速和轻松的方式搭建 Git 服务。使用 Go 语言开发的它能够通过独立的二进制进行分发,支持了 Go 语言支持的所有平台,包括 Linux、Mac OS、Windows 以及 arm 平台。与传统 Git 相比它最大的优势在于拥有图形化界面。
第一步:下载镜像 docker pull gogs/gogs;
[root@192 ~]# docker pull gogs/gogs
Using default tag: latest
latest: Pulling from gogs/gogs
97518928ae5f: Pull complete
d20a5437c0b4: Pull complete
ec9934e62f5f: Pull complete
2a880a4f6876: Pull complete
7bb13647629b: Pull complete
641b202f48eb: Pull complete
8f12f9a5cd7d: Pull complete
Digest: sha256:fbae7c126411d3fa3f8fdca17a65b196887ab23e3b7375f682a13daf5806bb19
Status: Downloaded newer image for gogs/gogs:latest
docker.io/gogs/gogs:latest
[root@192 ~]#
第二步:创建 Gogs 容器 docker run -di --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs;
# 容器名称 gogs
# 端口映射,22 端口映射为 10022,3000 端口映射为 3000
[root@192 ~]# docker run -di --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs
3af9726ff2d9430be43f7f3d78c206b9a53d356347e8a92c23316a7d2e6533f8
[root@192 ~]#
第三步:在本地浏览器进行访问,初始界面如下;
此处选择数据库类型为 SQLite3
修改域名为 192.168.200.129
修改应用 URL 为 http://192.168.200.129:3000/
随后点击“立即安装”,Gogs 安装与配置完成;
首先我们创建一个仓库;
创建成功后就可以将代码上传至仓库了;
这里我使用 idea(本地 git 环境已搭建,这里不再赘述)以及一个示例项目演示上传操作;
选中项目,右键点击 “file” --> “git” --> “Repository” --> “Reomtes”;
接下来增加远程地址,也就是我们 Gogs 远程仓库的地址;
此时就可以进行代码上传了,先点击 “Git” --> “Add”,将项目上传至暂存区;
选择 “git” --> “Repository” --> “push” 进行推送;
输入用户名和密码登录 Gogs 后即可推送成功;
此时再次查看 Gogs 中的仓库,可以看到项目已上传至 Gogs 仓库;
代码上传至 Git 演示成功。
登入 Jenkins,点击 “新建 Item”,输入任务名称并选择“构建一个maven项目”;
点击“确定”,之后我们作出如下配置;
项目描述
源码管理
build
配置完成,点击保存,项目即创建完成;
返回面板,点击按钮执行此任务;
此操作相当于我们将项目文件的执行过程拿到了 Jenkins 系统当中。
文章浏览阅读1.3k次。# -*- coding: utf-8 -*-"""@File : 200113_等比例调整图像分辨率大小.py@Time : 2020/1/13 13:38@Author : Dontla@Email : [email protected]@Software: PyCharm"""import cv2def img_resize(image):height, width = image...._opencv小图等比例缩放
文章浏览阅读42次。对于这些调制技术的误码率(BER)研究是非常重要的,因为它们可以帮助我们了解在不同信道条件下系统的性能表现。通过以上步骤,您可以进行OFDM、OOK、PPM和QAM的误码率仿真研究,并绘制它们的误码率曲线,以便更好地了解它们在不同信道条件下的性能特点。针对这些调制技术的BER研究是非常重要的,可以帮助我们更好地了解这些技术在不同信道条件下的性能表现,从而指导系统设计和优化。6. 分析结果:根据误码率曲线的比较,分析每种调制方案在不同信噪比条件下的性能,包括其容忍的信道条件和适用的应用场景。_ber仿真
文章浏览阅读2.5w次,点赞3次,收藏3次。1、场景照抄官方的实例,绑定了 myData.Age 这个值。实际选择某个日期后,从 vuetool(开发工具)看,值已经更新了,但视图未更新。2、尝试绑定另一个值: myData,可以正常的触发 @change 方法。可能是:值绑定到子对象时,组件没有侦测到。3、解决使用 @blur 代替 @change 方法。再判断下 “值有没有更新” 即可。如有更好的方法,欢迎评论!..._el-date-picker @change不触发
文章浏览阅读1.5k次,点赞2次,收藏8次。Projectlnliersclass pcl: : Projectlnliers< PointT >类 Projectlnliers 使用一个模型和一组的内点的索引,将内点投影到模型形成新的一个独立点云。关键成员函数 void setModelType(int model) 通过用户给定的参数设置使用的模型类型 ,参数 Model 为模型类型(见 mo..._projectinliers
文章浏览阅读2.4k次。“System.BadImageFormatException”类型的未经处理的异常在 xxxx.exe 中发生其他信息: 未能加载文件或程序集“xxxxxxx, Version=xxxxxx,xxxxxxx”或它的某一个依赖项。试图加载格式不正确的程序。此原因是由于 ” 目标程序的目标平台与 依赖项的目标编译平台不一致导致,把所有的项目都修改到同一目标平台下(X86、X64或AnyCPU)进行编译,一般即可解决问题“。若果以上方式不能解决,可采用如下方式:右键选择配置管理器,在这里修改平台。_“system.badimageformatexception”类型的未经处理的异常在 未知模块。 中发生
文章浏览阅读2.4k次。记录一下碰到的问题:1.Assetbundle加载问题: 原PC打包后的AssetBundle导入安卓工程后,加载会出问题。同时工程打包APK时,StreamingAssets中不能有中文。解决方案: (1).加入PinYinConvert类,用于将中文转换为拼音(多音字可能会出错,例如空调转换为KongDiao||阿拉伯数字不支持,如Ⅰ、Ⅱ、Ⅲ、Ⅳ(IIII)、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ..._电脑软件移植安卓
文章浏览阅读2.4k次。话不多说参考书籍 汪文君补充知识:start是异步,run是同步,start的执行会经过JNI方法然后被任务执行调度器告知给系统内核分配时间片进行创建线程并执行,而直接调用run不经过本地方法就是普通对象执行实例方法。什么是线程?1.现在几乎百分之百的操作系统都支持多任务的执行,对计算机来说每一个人物就是一个进程(Process),在每一个进程内部至少要有一个线程实在运行中,有时线..._start 是同步还是异步
文章浏览阅读5.3k次,点赞9次,收藏34次。我主要用了层次选择器和属性选择器可以随意选择,方便简单为主大体CSS格式 大家自行构造网页主体<body> <div class='main' > <div class='left'> <img src="images/pic.gif" /> <br/><br/> <img src="images/col.gif" alt="收藏本片"/&_单击标题“非缘勿扰”,元素中有id属性的的文本(主演、导演、标签、剧情
文章浏览阅读2.2k次。完整的解决思路_no module named 'win32com
文章浏览阅读901次,点赞20次,收藏23次。浏览器是每台电脑的必装软件,去浏览器搜索资源和信息已经成为我们的日常,我媳妇儿原本也以为浏览器就是上网冲浪而已,哪有那么强大,但经过我的演示之后她惊呆了,直接给我竖起大拇指道:“原来浏览器还能这么用?大开眼界!今天来给大家介绍几款实用的浏览器插件,学会之后让你的浏览器“活过来”!_浏览器插件助手
文章浏览阅读101次。NumPy是Python中最常用的科学数学计算库之一,它提供了高效的多维数组对象以及对这些数组进行操作的函数NumPy的核心是ndarray(N-dimensional array)对象,它是一个用于存储同类型数据的多维数组Numpy通常与SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用,用于替代MatLabSciPy是一个开源的Python算法库和数学工具包;Matplotlib是Python语言及其Numpy的可视化操作界面'''_数学中常用的环境有numpy
文章浏览阅读1.1w次。docker in docker说白了,就是在docker容器内启动一个docker daemon,对外提供服务。优点在于:镜像和容器都在一个隔离的环境,保持操作者的干净环境。想到了再补充 :)一:低版本启动及访问启动1.12.6-dinddocker run --privileged -d --name mydocker docker:1.12.6-dind在其他容器访问d..._dind