关于linux:持续集成

继续集成教程
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插件用于把打包的利用公布到近程服务器




评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理