继续集成教程
1..devops 介绍
1.1.Devops 是什么
应用程序DevOps(Development 开发和 Operations 运维的组合词)是一组过程、办法与零碎的统称,用于促成开发(/ 软件工程)、技术经营和品质保障(QA)部门之间的沟通、合作与整合。
DevOps 促成开发、测试、运维之间的沟通、合作与整合
它是一种器重“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通单干的文化、静止或常规。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、公布软件可能更加地快捷、频繁和牢靠。
软件它的呈现是因为行业日益清晰地意识到:为了按时交付软件产品和服务,开发和运维工作必须严密单干。
为了疾速代码上线
平时咱们开发和运维的流程是剖析需要 (plan) -> 代码开发(code) -> 打包构建(build) -> 用例测试(test) -> 上线部署(deploy) -> 我的项目经营(operation) -> 异样监控(monitor)。在整个流程中个别公司经常会调配三个岗位(开发、测试、运维),而在 DevOps 呈现后,只需一个岗位即可,这个岗位则是囊括了开发、测试和运维的工作,集成了开发、交付、保护、监控等。以后简直所有的顶尖公司均采纳了该办法,用以进步软件开发品质,并缩短软件开发生命周期。从而以达到每个公司对软件产品的冀望,交付出客户最称心的产品。
1.2Devops 能干什么
进步产品质量
1. 自动化测试
比方码云外面的自动化测试, 测试你的代码里有没有破绽,有没有 bug
2. 继续集成
咱们能够把这个继续集成了解为一直的代码合并, 开发写完代码会公布到线上, 开发的代码是基于原有的性能上写的, 当你把新写的模块放到总的代码外面去, 咱们会进行代码合并
3. 代码管理工具
1.3Devops 实现
大公司不不便往 devops 迁徙
devops 实用于 devops
刚建设的小公司。中小型公司缓缓迁徙
1.4 继续集成概念
继续集成 Continuous IntegrationCI
继续交付 Continuous DeliveryCD
继续部署 Continuous Deployment CD
1、什么是继续集成:
是一种软件开发工夫。继续集成强调开发人员提交了新代码之后,立即进行构建、(单元)测试。依据测试后果,咱们能够确定新代码和原有代码是否正确地集成在一起。
开发进去的货色, 立马进行上线
2、什么是继续交付:
继续交付指的是在继续集成的环境根底之上,将代码部署到预生产环境
3、继续部署:
在继续交付的根底上,把部署到生产环境的过程自动化,继续部署和继续交付的区别就是最终部署到生产环境是自动化的。
4、部署代码上线流程
1. 代码获取(间接了拉取)
2. 编译(可选)
3. 配置文件放进去
4. 打包
5.scp 到指标服务器
6. 将指标服务器移除集群
7. 解压并搁置到 Webroot(网站根站点目录)
8.Scp 差别文件
9. 重启(可选)
10. 测试
11. 退出集群
1.5 版本公布介绍
1)AB Test 是一种灰度形式,通常差别度较小,偏重从多种计划中抉择最优计划。
简略的说,就是为同一个指标制订两个计划(比方两个页面),让一部分用户应用 A 计划,另一部分用户应用 B 计划,记录下用户的应用状况,看哪个计划更合乎。
一般来说,每个设计方案大体上是雷同的,只是某一个中央有所不同,比方某出排版、文案、图片、色彩等。而后对不同的用户展现不同的计划。
2)蓝绿部署,英文名 Blue Green Deployment,是一种能够保证系统在不间断提供服务的状况下上线的部署形式。
所谓蓝绿部署,是指同时运行两个版本的利用,如图所示,蓝绿部署的时候,并不进行掉老版本,而是间接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。然而蓝绿部署要求在降级过程中,同时运行两套程序,对硬件的要求就是日常所需的二倍,比方日常运行时,须要 10 台服务器撑持业务,那么应用蓝绿部署,你就须要购买二十台服务器。
‘
3)滚动公布可能解决掉蓝绿部署时对硬件要求增倍的问题。
所谓滚动降级,就是在降级过程中,并不一下子启动所有新版本,是先启动一台新版本,再进行一台老版本,而后再启动一台新版本,再进行一台老版本,直到降级实现,这样的话,如果日常须要 10 台服务器,那么降级过程中也就只须要 11 台就行了。
4)灰度公布也叫金丝雀公布,起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。
在灰度公布开始后,先启动一个新版本利用,然而并不间接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本利用,就是咱们的金丝雀。如果没有问题,那么能够将大量的用户流量导入到新版本上,而后再对新版本做运行状态察看,收集各种运行时数据,如果此时对新旧版本做各种数据比照,就是所谓的 A / B 测试。
当确认新版本运行良好后,再逐渐将更多的流量导入到新版本上,在此期间,还能够一直地调整新旧两个版本的运行的服务器正本数量,以使得新版本可能接受越来越大的流量压力。直到将 100% 的流量都切换到新版本上,最初敞开剩下的老版本服务,实现灰度公布。
如果在灰度公布过程中(灰度期)发现了新版本有问题,就应该立刻将流量切回老版本上,这样,就会将负面影响管制在最小范畴内。
2. 版本控制系统
2.1 版本控制系统简介
版本控制(Revision control)是一种在开发的过程中用于治理咱们对文件、目录或工程等内容的批改历史,不便查看更改历史记录,备份以便复原以前的版本的软件工程技术。多人开发
2.2 为什么须要版本控制系统
作用一: 备份
程序员每做一步功能性的更新和迭代,都须要备份一次,这是一个很好的习惯,而在版本控制工具中你不须要再复制和粘贴,产生大量的代码冗余,你只须要提交一次到服务器中就能够了。
作用二: 协调开发
个别公司的开发团队少则十几个人,多则上百。当多集体共同开发一套零碎的时候,你改一部分,我改一部分,必定有代码抵触的中央,当多集体同时改了一个文件,这么多人,每个人改哪一块了?最终以谁的代码为准?如何解决这种场景下的代码抵触?这就是版本控制的协调开发作用,这在没有工具之前是十分麻烦,你须要关上至多两个窗口,一行一行的比拟。
2.3 常见版本管理工具
1)SVN
集中式的版本控制系统, 只有一个数据仓库, 如果地方仓库挂了或者不可拜访了, 所有的使用者无奈应用 svn, 无奈进行提交或备份
2)Git
分布式版本零碎, 在每个使用者电脑上都有一个残缺的数据仓库, 没有网络仍旧能够应用 git, 为了多人单干, 会将本地数据同步到 Git 服务器或者 Github 等代码仓库
3.Git 本地仓库
3.1Git 装置
3.1.1 零碎环境筹备
1) 环境筹备
敞开防火墙
敞开 selinux
3.1.2Git 装置部署
[root@git ~]# yum install git -y
[root@git ~]# git config
用法:git config [选项]
--global 应用全局配置文件
--system 应用零碎级配置文件
–local 应用版本库级配置文件
[root@git ~]# git config –global user.name “yunxuan”
[root@git ~]# git config –global user.email “yunxuan@qq.com”
[root@git ~]# git config –global color.ui true
[root@git ~]# git config –list
user.name=yunxuan
user.email=yunxuan@qq.com
color.ui=true
3.1.3 Git 初始化
mkdir git_data
cd git_data
初始化仓库
git init
查看工作区状态
git status
[root@git git_data]# tree .git/
branches #分支目录
config# 定义我的项目特有的配置选项
description #定义我的项目特有的配置选项
HEAD #批示以后的分支
hooks #包含 git 勾子文件
info #蕴含一个全局排除文件
objects #寄存所有数据内容, 有 info 和 pack 两个子文件夹
refs #寄存指向数据(分支) 的提交对象的指针
index #保留暂存区信息, 在执行 gitinit 的时候, 这个文件还没有
3.2.Git 惯例应用
3.2.1 创立数据 - 提交数据
[root@git git_data]# touch a b c
[root@git git_data]# git status
增加 a 文件到暂存区
[root@git git_data]# git add a
增加所有文件到暂存区
[root@git git_data]# git add .
从暂存去删除 c
[root@git git_data]# git rm –cached c
同时删除工作区和暂存区
[root@git git_data]# git rm -f b
把暂存区提交到本地仓库
[root@git git_data]# git commit -m “add newfile a”
3.2.2 Git 四种状态
本地目录
缓存区
本地仓库
近程仓库
3.2.3 Git 根底命令
批改文件名的两种办法
1)惯例改名
[root@git git_data]# git add a.txt
[root@git git_data]# git status
[root@git git_data]# git commit -m “modifiled a a.txt”
2) 间接用 git 改名
[root@git git_data]# git mv a.txt a
[root@git git_data]# git status
[root@git git_data]# git commit -m “modefile a.txt a “
git 文件比对
git diff 默认比对工作目录和暂存区有什么不同
git diff –cache #比对暂存区和本地仓库有什么不同
间接从工作目录提交到本地仓库
[root@git git_data]# git commit -am “111”
查看历史提交过的信息
[root@git git_data]# git log
[root@git git_data]# git log –oneline
[root@git git_data]# git log –oneline –decorate
–decorate #显示指针
–oneline #精简显示
-p #显示具体内容
切换历史版本指针
[root@web02 data]# git reset –hard 06fa861
查看所有的历史
[root@web02 data]# git reflog
git 分支
创立一个 test 分支
[root@web02 data]# git branch test
查看分支
[root@web02 data]# git branch
切换分支
[root@web02 data]# git checkout test
创立并切换分支
[root@web02 data]# git checkout -b test
删除分支
[root@web02 data]# git branch -d test
合并 test 分支
[root@web02 data]# git merge test
代码抵触演示
新版本不会呈现谬误
3.2.4 Git 标签应用
给 8a8c51d 打 tag 标签
git log
git tag -a v1.0 8a8c51d -m “tag v1.0 abc index”
查看 v1.0 信息
git show v1.0
给以后版本打标签
[root@web02 data]# git tag -a v2.0 -m “v2.0”
删除标签
[root@web02 data]# git tag -d v2.0
4.Github 应用
开源软件 GitHub 是一个面向及公有我的项目的托管平台,因为只反对 Git 作为惟一的版本库格局进行托管,故名 GitHub。
注册用户
创立仓库
配置 ssh-key
上传我的项目
克隆我的项目到本地
推送新代码到 github
增加一个 origin 的近程仓库
git@github.com:a914356887/git_data.gitgit remote add origin
删除近程仓库
git remote remove origin
查问近程仓库
git remote -v
把以后分支改名
[root@web01 data]# git branch -M main
推送 main 我的项目到 origin 近程仓库
git push -u origin main
生成密钥
[root@web01 data]# ssh-keygen -t rsa
查看密钥
[root@web01 data]# cat /root/.ssh/id_rsa.pub
5.Gitlab
5.1Gitlab 简介
GitLab 是一个用于仓库管理系统的开源我的项目,应用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它由 Ruby 写成。起初,一些局部用 Go 语言重写,现今并在国内外大中型互联网公司宽泛应用。
Gitlab 是公有的 github
git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
gitlab 是一个基于 git 实现的在线代码仓库软件,提供 web 可视化治理界面,通常用于企业团队外部合作开发
github 是一个基于 git 实现的在线代码托管仓库,亦提供可视化治理界面,同时收费账户和提供付费账户,提供凋谢和公有的仓库,大部分的开源我的项目都抉择 github 作为代码托管仓库
GitLab 是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的 Git 我的项目仓库,可通过 Web 界面进行拜访公开的或者私人我的项目。
GitLab 领有与 Github 相似的性能,可能浏览源代码,治理缺点和正文。能够治理团队对仓库的拜访,它十分易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集性能能够轻松实现代码复用,便于日后有须要的时候进行查找。
5.2 装置
5.2.1 下载 rpm 装置
装置环境
Centos6 或者 7
3G 内存(试验) 生产至多 8G
安装包
禁用防火墙, 敞开 selinux
https://about.gitlab.com/inst…
清华源下载地址:https://mirrors.tuna.tsinghua…
yum install -y curl policycoreutils-python openssh-server perl
rpm -ivh gitlab-ce-13.6.3-ce.0.el7.x86_64.rpm
5.2.2yum 源装置
1) 增加 yum 源
vi/etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua….
gpgcheck=0
enabled=1
2) 装置
[root@gitlab ~]# yum -y install openssh-server cronie git wget patch gitlab-ce-13.2.1
3) 配置 gitlab
vi /etc/gitlab/gitlab.rb
将 external_url ‘http://gitlab.example.com’ 更 … ‘http:// 你的地址 ’
更改数据目录, 也能够默认
git_data_dirs({
“default” => {
"path" => "/data"
}
})
优化过程缩小内存占用
unicorn[‘worker_processes’] = 2
5.3.Gitlab 介绍及常用命令
1) 常用命令
gitlab-ctl start #启动全副服务
gitlab-ctl restart# 重启全副服务
gitlab-ctl stop #进行全副服务
gitlab-ctl restart nginx #重启单个服务,如重启 nginx
gitlab-ctl status #查看服务状态
gitlab-ctl reconfigure #使配置文件失效
gitlab-ctl show-config #验证配置文件
gitlab-ctl uninstall #删除 gitlab(保留数据)
gitlab-ctl cleanse #删除所有数据,从新开始
gitlab-ctl tail <service name> 查看服务的日志
gitlab-ctl tail nginx #如查看 gitlab 下 nginx 日志
gitlab-rails console #进入控制台
组件介绍
nginx:动态 Web 服务器
gitlab-shell:用于解决 Git 命令和批改 authorized keys 列表,gitlab 是以 Git 为底层的,操作实际上最初就是调用 gitlab-shell 命令进行解决。
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后盾执行队列工作(异步执行)
unicorn:GitLab Rails 利用是托管在这个服务器下面的
gitlab 配置门路:/etc/gitlab/ 门路下有 gitlab.rb 配置文件
利用代码和组件依赖程序:/opt/gitlab
各个组件存储门路:/var/opt/gitlab/
git push
仓库默认存储门路 /var/opt/gitlab/git-data/repositories
版本文件备份门路:/var/opt/gitlab/backups/
nginx 装置门路:/var/opt/gitlab/nginx/
redis 装置门路:/var/opt/gitlab/redis
5.4gitlab 应用
5.4.1 应用 gitlab 批改图标登录页面提示信息
Navigation bar #导航栏
Favicon #网站图标
Sign in/Sign up pages #登录注册页面
5.4.2 构建第一个我的项目
5.4.2.1 创立一个组
5.4.2.2 创立我的项目
5.5 推送代码
1) 设置登录 key
2)三种形式
创立新的仓库
推送现有文件夹
推送现有 git 存储库
3)推送已有的仓库
因为我在应用 github 时候曾经创立了一个所以咱们间接用推送现有仓库
cd existing_repo
git remote remove origin
git remote add origin http://10.0.0.100/test/git_da…
git push -u origin master
5.6 设置 dev 用户并下载代码
5.6.1 创立 dev 用户
1) 创立用户
2)设置明码
3)dev 用户增加进入组
5.7master 分支爱护
gitlab12 版本之前默认不开启分支爱护
gitlab>=12 版本默认开启了分支爱护, 不容许间接推送代码到骨干
1.)关上我的项目
6.Jenkins
6.1jenkins 简介
Jenkins 是一个开源的、提供敌对操作界面的继续集成(CI) 工具,起源于 Hudson(Hudson 是商用的),次要用于继续、主动的构建 / 测试软件我的项目、监控内部工作的运行(这个比拟形象,暂且写上,不做解释)。Jenkins 用 Java 语言编写,可在 Tomcat 等风行的 servlet 容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具联合应用。罕用的版本控制工具有 SVN、GIT,构建工具有 Maven、Ant、Gradle。
官网
https://www.jenkins.io/
6.2 装置 Jenkins
1)装置 jdk
[root@jenkins ~]# rpm -ivh jdk-8u281-linux-x64.rpm
2)装置 Jenkins
[root@jenkins ~]# rpm -ivh jenkins-2.263.1-1.1.noarch.rpm
下载地址:https://mirrors.tuna.tsinghua…
6.3 装置目录解析
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/Jenkins #启动文件
/etc/logrotate.d/Jenkins #日志切割
/etc/sysconfig/Jenkins #jenkins 主配置文件, 比方端口、JENKINX_HOME 都能够在这配置
/usr/lib/jenkins/jenkins.war #jenkins 主配置, 降级间接下载一个 war 包放在这里
/var/lib/Jenkins #默认的工作目录 JENKINX_HOME
/var/log/Jenkins #日志文件
/var/lib/jenkins/plugins/ #插件目录
6.4 启动服务
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins
6.5 进入 jenkins 网页配置
http://10.0.0.101:8080/
查问明码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
5266a733987e474f9a45c453d772f2b0
批改明码
6.6 更换插件源
Advanced 首页 –> Manage Jenkins –> Manager Plugins—>
https://updates.jenkins.io/up…
改为
https://mirror.tuna.tsinghua….
更改实现之后须要重启 Jenkins
systemctl restart Jenkins
6.7 装置中文插件
首页 –> Manage Jenkins –> Manager Plugins
须要装置
Locale plugin 和 Localization: Chinese (Simplified)
而后零碎关系—系统配置 –Default Language
注: 如果产生一半翻译, 一半不翻译的状况先把默认语言改为 zh_US 重启服务器, 而后再改为 zh_CN 即可解决
6.8 导入插件
插件目录 /var/lib/jenkins/plugins
6.9 根底构建我的项目
6.9.1 构建一个自在格调的我的项目
新建工作—自在格调我的项目—输出名字—左下角确定
批改 shell 创立文件
touch 1.txt
察看
/var/lib/jenkins/workspace/ 目录下
6.9.2 Jenkins+Gitlab+ 脚本 +Nginx 主动公布网站
在 gitlab 上创立一个仓库
在 Jenkins 中配置
jenkins 服务器编写脚本
[root@jenkins index]# cat /scripts/deploy.sh
!/bin/bash
DATE=date +%F-%H-%M-%S
WEB_HTML=/usr/share/nginx/
cd /var/lib/jenkins/workspace/freestyle-job/
tar -zcf /tmp/web-${DATE}.tar.gz ./
scp /tmp/web-${DATE}.tar.gz root@10.0.0.7:/$WEB_HTML
ssh root@10.0.0.7 “mkdir ${WEB_HTML}/web-${DATE}”
ssh root@10.0.0.7 “cd $WEB_HTML && tar -xf web-${DATE}.tar.gz -C web-${DATE} && rm -rf web-${DATE}.tar.gz “
ssh root@10.0.0.7 “cd $WEB_HTML && rm -rf html && ln -s web-${DATE} html “
chmod +x /scripts/deploy.sh
免密钥认证
5) 配置 jenkins 的构建我的项目执行后应用调用脚本
6.9.3 推送代码主动构建
咱们须要复制这个 hash 值
2) 配置 gitlab
6.9.4Jenkins 执行后果发送给 Gitlab
1)Gtilab 生成 token 给 jenkins 链接应用
用户—设置—拜访令牌
2)配置 jenkins
系统管理—系统配置—Gitlab
3)配置 Jenkins 哪个我的项目返回给 Gitlab
进入 jenkins 我的项目—配置—构建后的操作
4)立刻构建测试
6.10Maven 我的项目构建
6.10.1maven 介绍
项目管理工具我的项目生命周期插件 Maven 是一个,它蕴含了一个我的项目对象模型 (Project Object Model),一组规范汇合,一个 (Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase) 中(plugin)指标 (goal) 的逻辑。当你应用 Maven 的时候,你用一个明确定义的我的项目对象模型来形容你的我的项目,而后 Maven 能够利用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
插件 Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令通知 Maven 执行一系列的有序的步骤,直到达到你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的指标,这些指标实现了像编译和创立一个 JAR 文件这样的工作。
此外,Maven 可能很不便的帮你治理我的项目报告,生成站点,治理 JAR 文件,等等。
maven 次要性能就是开发人员写完代码咱们须要打包在公布,maven 就是打包命令, 而后去官网下载依赖去打包我的项目
6.10.2maven 装置
http://maven.apache.org/downl…
清华源地址:
[root@jenkins ~]# wget https://mirrors.tuna.tsinghua…
[root@jenkins freestyle-job]# tar -xf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
[root@jenkins freestyle-job]# cd /usr/local/
[root@jenkins local]# ln -s apache-maven-3.5.4/ maven
6.10.3 目录解析
bin 该目录蕴含了 mvn 运行的脚本,这些脚本用来配置 java 命令,筹备好 classpath 喝相干的 java 零碎属性
mvn 是基于 UNIX 平台 shell 脚本,mvn.bat 是基于 Windows 平台的运行脚本(所有的 mvn 命令,理论均为执行这两条命令)
mvnDebug,mvnDebu.bat 同样,前者是 unix 环境 shell 脚本,后者为 windows 环境脚本
m2.conf 这是 classworlds 的配置文件
boot 该目录下文件是一个类加载器,绝对于默认的 java 类加载器,它提供了更丰盛的语法以不便配置,maven 用该框架,加载本人的类库
conf 该目录蕴含一个十分重要的文件 settings.xml,间接批改此文件,能够在机器上全局的定制 maven 行为,个别倡议,复制该文件到~ /.m2/ 目录下,而后再批改,在用户范畴定制 maven 行为
lib 蕴含了 maven 容许时须要的 java 类库,这个 lib 目录能够说是真正的 maven
LICENSE.txt 记录了 maven 应用的软件许可证
NOTICE.txt 记录了 maven 蕴含的第三方软件
README.txt 蕴含了 maven 的简介,包含装置需要和如何装置的简要命令等
6.10.4maven 常用命令
首先增加环境变量
export PATH=/usr/local/apache-maven-3.5.4/bin/:$PATH
mvn -v #查看版本号
mvn package # 打包
mvn site #产生 site
mvn tes #运行测试
mvn compile #编译
mvn test-compile #编译测试代码
mvn archetype:generate #反向生成我的项目的骨架
mvn jar# 生成 jar 包
mvn install #本地装置
mvn clean #革除编译后的我的项目文件
mvn eclipse:eclipse #生成 eclipse 我的项目
mvn idea:idea #生成 idea 我的项目
mvn -Dtest package #只打包不测试
mvn test -skipping compile #只测试不编译
mvn dependency:list #查看以后我的项目已被解析的依赖
mvn deploy #上传到私服
mvn source:jar #源码打包
mvn -e #显示具体错误信息
mvn validate #验证工程是否正确
mvn jetty:run #运行我的项目于 jetty 上
6.10.4 批改 maven 国内打包源
[root@jenkins helloword]# vim /usr/local/maven/conf/settings.xml
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus…</url>
</mirror>
</mirrors>
6.10.5 部署 Maven 私服 nexus
https://www.sonatype.com/prod…
1 配置仓库的两种选项
1) 在我的项目中的 pom.xml 配置, 只对以后我的项目失效
2) 在 maven 配置全局所有我的项目失效
2) 部署 nexus
[root@nexus ~]# rpm -ivh jdk-8u281-linux-x64.rpm
[root@nexus ~]# tar -xf nexus-3.29.0-02-unix.tar.gz -C /usr/local/
[root@nexus local]# ln -s nexus-3.29.0-02/ nexus
3)启动 nexus
[root@nexus nexus]# cd /usr/local/nexus/bin/
[root@nexus bin]# ./nexus start
4)配置文件解析
查看 nexus 的配置文件 conf/nexus.properties
application-port=8081 # nexus 的拜访端口配置
application-host=0.0.0.0 # nexus 主机监听配置(不必批改)
nexus-webapp=${bundleBasedir}/nexus # nexus 工程目录
nexus-webapp-context-path=/nexus # nexus 的 web 拜访门路
nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus 仓库目录
runtime=${bundleBasedir}/nexus/WEB-INF # nexus 运行程序目录
5) 进入网页配置代理服务器
http://IP:8081
右上角 sign in 登陆
以前版本默认明码
账户 admin
明码 admin123
新版本明码写在 /usr/local/sonatype-work/nexus3/admin.password 文件中
cat /usr/local/sonatype-work/nexus3/admin.password
6)配置代理服务器
点击小齿轮—Repositories—maven-central—Remote storage 批改为阿里云的
7)配置应用 nexus 私服
点击小齿轮—Repositories—maven-public
记录期中的 url
a. 在 maven 的 setting.xml 中配置
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<!-- 该镜像的惟一标识符。id 用来辨别不同的 mirror 元素。-->
<id>maven-public</id>
<!-- 镜像名称 -->
<name>maven-public</name>
<!--* 指的是拜访任何仓库都应用咱们的私服 -->
<mirrorOf>*</mirrorOf>
<!-- 该镜像的 URL。构建零碎会优先思考应用该 URL,而非应用默认的服务器 URL。-->
<url>http://10.0.0.102:8081/repository/maven-public/</url>
</mirror>
</mirrors>
b. 配置我的项目的 pom 文件
<repositories>
<repository>
<id>maven-nexus</id>
<name>maven-nexus</name>
<url>http://10.0.0.102:8081/repository/maven-public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
二选一即可
6.10.6 Java 代码主动上线
1) 配置 jenkins 中 maven 门路
系统管理—全局工具配置—新增 maven
2)创立一个我的项目
maven-job
!/bin/bash
DATE=date +%F-%H-%M-%S
MAVEN_DIR=/var/lib/jenkins/workspace/maven-job
cd $MAVEN_DIR
cp target/server-1.0-SNAPSHOT.jar /tmp/
kill -9 ps -ef | grep "java -jar target/server-1.0-SNAPSHOT.jar" | grep -v grep|awk '{print $2}'
rm -rf /tmp/server-1.0-SNAPSHOT.jar
nohup java -jar /tmp/server-1.0-SNAPSHOT.jar &
mkdir /mvn/maven-${DATE}
mv $MAVEN_DIR/* /mvn/maven-${DATE}
!/bin/bash
DATE=date +%F-%H-%M-%S
MAVEN_DIR=/var/lib/jenkins/workspace/maven-job
cd $MAVEN_DIR
kill -9 ps -ef | grep "java -jar target/server-1.0-SNAPSHOT.jar" | grep -v grep|awk '{print $2}'
mkdir /mvn/maven-${DATE}
mv $MAVEN_DIR/* /mvn/maven-${DATE}
nohup java -jar /mvn/maven-${DATE}/src/server-1.0-SNAPSHOT.jar &
6.11pipline 我的项目
6.11.1pipline 介绍
中文意为管线,意义等同于流水线。
从一个景象说起,有一家咖啡吧生意特地好,每天来的客人川流不息,客人 A 来到柜台,客人 B 紧随其后,客人 C 排在客人 B 前面,客人 D 排在客人 C 前面,客人 E 排在客人 D 前面,始终排到店面门外。老板和三个员工首先为客人 A 筹备食物:员工甲拿了一个洁净的盘子,而后员工乙在盘子里装上薯条,员工丙再在盘子里放上豌豆,老板最初配上一杯饮料,实现对客人 A 的服务,送走客人 A,下一位客人 B 开始被服务。而后员工甲又拿了一个洁净的盘子,员工乙又装薯条,员工丙又放豌豆,老板又配上了一杯饮料,送走客人 B,客人 C 开始被服务。始终反复上来。
Jenkins 2.0 的精华是 Pipeline as Code,是帮忙 Jenkins 实现 CI 到 CD 转变的重要角色。什么是 Pipeline,简略
来说,就是一套运行于 Jenkins 上的工作流框架,将本来独立运行于单个或者多个节点的工作连接起来,实现单个
工作难以完成的简单公布流程。Pipeline 的实现形式是一套 Groovy DSL,任何公布流程都能够表述为一段 Groovy
脚本,并且 Jenkins 反对从代码库间接读取脚本,从而实现了 Pipeline as Code 的理念。
6.11.2pipline 概念
pipeline 是一个用户定义的 cd 流水线没事。pipeline 代码定义了通常包含构建、测试和公布步骤的残缺的构建过程
Node
node 是一个机器, 它是 Jenkins 环境的一部分, 并且可能执行 pipeline 同时 node 代码块也是脚本式
Stage
Stage 块定义了在整个 Pipeline 中执行的概念上不同的工作子集(例如构建, 测试, 和部署阶段) 许多插件应用它可视化或出现 Jenkins 管道状态 / 进度
Step
step 是一项工作, 从根本上讲, 一个步骤通知 Jenkins 在特定工夫点(或过程中的步骤) 要做什么. 例如. 应用 sh step:sh‘make’能够执行 make 这个 shell 命令
pipeline{
agent any
stages{
stage(“get code”){
steps{echo "get code from scm"}
}
stage(“package”){
steps{echo "package code"}
}
stage(“deploy”){
steps{echo "deploy packge to node1"}
}
}
}
示列 2:
pipeline{
agent any
stages{
stage("get code"){
steps{echo "get code"}
}
stage("unit test"){
steps{echo "unit test"
} }
stage("package"){
steps{sh 'tar zcf /opt/web‐${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=./Jenkinsfile'
} }
stage("deploy"){
steps{sh 'ssh 10.0.0.7"cd /code && mkdir web‐${BUILD_ID}"'sh'scp /opt/web‐${BUILD_ID}.tar.gz 10.0.0.7:/code/web‐${BUILD_ID}'sh'ssh 10.0.0.7 "cd /code/web‐${BUILD_ID} && tar xf web‐${BUILD_ID}.tar.gz && rm -rf web‐${BUILD_ID}.tar.gz"'
sh 'ssh 10.0.0.7"cd /code && rm -rf html && ln -s web‐${BUILD_ID} /code/html"'
}
} }
}
报错演示
1)如果报错 128 谬误, 因为启动用户是 Jenkins, 没有增加 ssh-key 所以这里会报错
解决办法一:
批改主配置文件中启动用户为 root
解决办法二:
userdel Jenkins
useradd Jenkins
给 jenkins 生成目录受权
生成 key 增加
实训一: 千台并发
Jenkins 装置插件
Publish Over SSH 用于连贯近程服务器
Deploy to container 插件用于把打包的利用公布到近程服务器