先构建,自动测试,然后自动发布;这种称之为敏捷开发
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
git工作流程
1.代码编写
2.将代码添加至暂存区
3.将代码提交至本地仓库
4.将代码提交至远程仓库
5.从远程仓库拉取代码
自动编译
自动打包
远程发布
代码拉取
邮件通知
测试统计
定时任务
现在java用的构建都是maven
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
ci相当于configure到make过程
项目构建之后才能发布
测试就是make是否会出现error
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
[root@gsy ~]# hostnamectl set-hostname jenkins
[root@gsy ~]# su
[root@jenkins ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
[root@jenkins ~]# iptables -F
卸载原有的
循环卸载openJdk
[root@jenkins ~]# rpm -e --nodeps $(rpm -qa | grep openjdk)
[root@jenkins ~]# java -version
bash: /usr/bin/java: No such file or directory
安装jdk
[root@jenkins ~]# tar xf /abc/jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins local]# ls
bin etc games include jdk1.8.0_91 lib lib64 libexec redis sbin share src
[root@jenkins local]# mv jdk1.8.0_91/ java
[root@jenkins local]# ls
bin etc games include java lib lib64 libexec redis sbin share src
[root@jenkins local]# vim /etc/profile
#在末尾追加四行
JAVA_HOME=/usr/local/java
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
[root@jenkins local]# source /etc/profile
[root@jenkins local]# echo $PATH
/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@jenkins local]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
jre 虚拟机jvm
maven是用来构建项目的,构建完之后,交给git
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs
[root@jenkins local]# tar xf /abc/apache-maven-3.6.3-bin.tar.gz -C /usr/local/
[root@jenkins local]# ls
apache-maven-3.6.3 bin etc games include java lib lib64 libexec redis sbin share src
[root@jenkins local]# mv apache-maven-3.6.3/ maven
[root@jenkins local]# ls
bin etc games include java lib lib64 libexec maven redis sbin share src
[root@jenkins local]# vim /etc/profile
#追加下面三行
MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
[root@jenkins local]# source /etc/profile
[root@jenkins local]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_91, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
点击下载,点击"Red Hat/Fedora/CentOS"
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
--2020-05-31 21:27:25-- https://pkg.jenkins.io/redhat-stable/jenkins.repo
Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.78.133, 2a04:4e42:12::645
Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.78.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85
Saving to: ‘/etc/yum.repos.d/jenkins.repo’
100%[======================================================================>] 85 --.-K/s in 0s
2020-05-31 21:27:28 (481 KB/s) - ‘/etc/yum.repos.d/jenkins.repo’ saved [85/85]
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@jenkins ~]# yum install jenkins -y
#下载速度过慢,我有以前下载过的一个jenkinsrpm包,直接导进来
[root@jenkins ~]# cd /abc/
[root@jenkins abc]# ls
apache-maven-3.6.3-bin.tar.gz jdk-8u91-linux-x64.tar.gz jenkins-2.222.3-1.1.noarch.rpm
[root@jenkins abc]# rpm -ivh /abc/jenkins-2.222.3-1.1.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jenkins-2.222.3-1.1 ################################# [100%]
[root@jenkins abc]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@jenkins abc]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
再次开启,成功
[root@jenkins abc]# ln -s /usr/local/java/bin/java /usr/bin
[root@jenkins abc]# systemctl start jenkins
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@jenkins abc]# systemctl daemon-reload
[root@jenkins abc]# systemctl start jenkins
[root@jenkins abc]# ps aux | grep jenkins
jenkins 5676 24.3 6.9 3652792 129176 ? Ssl 22:02 0:05 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 6235 0.0 0.0 112712 964 pts/0 R+ 22:02 0:00 grep --color=auto jenkins
[root@jenkins abc]# cat /var/lib/jenkins/secrets/initialAdminPassword
26085dc163d44ea7b59470b5217d19da
访问 http://192.168.247.134:8080/pluginManager/advanced
将 "https/updates.jenkins.io/update-center.json"修改为 “http/updates.jenkins.io/update-center.json”
[root@jenkins abc]# systemctl restart jenkins
刷新页面
点击check now 测试
备注:
若是在插件管理的高级选项还是有报错
There were errors checking the update sites: SocketTimeoutException: connect timed out
那么重新修改,重新重启,或者等一会
刷新原始网页
过了一会,再点击安装选择插件安装默认插件,出现安装过程,应该是网络的原因
重试,安装完毕
重启要等一会
Ant Plugin
Apache HttpComponents Client 4.x API Plugin
bouncycastle API Plugin
Branch API Plugin
Build Timeout
Command Agent Launcher Plugin
Credentials Binding Plugin
Credentials Plugin
Display URL API
Durable Task Plugin
Email Extension Plugin
Folders Plugin
Git client plugin
Git plugin
GIT server Plugin
GitHub API Plugin
GitHub Branch Source Plugin
GitHub plugin
Gradle Plugin
Jackson 2 API Plugin
JavaScript GUI Lib: ACE Editor bundle plugin
JavaScript GUI Lib: Handlebars bundle plugin
JavaScript GUI Lib: jQuery bundles (jQuery and jQuery UI) plugin
JavaScript GUI Lib: Moment.js bundle plugin
JSch dependency plugin
JUnit Plugin
LDAP Plugin
Localization Support Plugin
Localization: Chinese (Simplified)
Lockable Resources plugin
Mailer Plugin
MapDB API Plugin
Matrix Authorization Strategy Plugin
Matrix Project Plugin
Oracle Java SE Development Kit Installer Plugin
OWASP Markup Formatter Plugin
PAM Authentication plugin
Pipeline
Pipeline Graph Analysis Plugin
Pipeline: API
Pipeline: Basic Steps
Pipeline: Build Step
Pipeline: Declarative
Pipeline: Declarative Extension Points API
Pipeline: GitHub Groovy Libraries
Pipeline: Groovy
Pipeline: Input Step
Pipeline: Job
Pipeline: Milestone Step
Pipeline: Model API
Pipeline: Multibranch
Pipeline: Nodes and Processes
Pipeline: REST API Plugin
Pipeline: SCM Step
Pipeline: Shared Groovy Libraries
Pipeline: Stage Step
Pipeline: Stage Tags Metadata
Pipeline: Stage View Plugin
Pipeline: Step API
Pipeline: Supporting APIs
Plain Credentials Plugin
Resource Disposer Plugin
SCM API Plugin
Script Security Plugin
SSH Build Agents plugin
SSH Credentials Plugin
Structs Plugin
Subversion Plug-in
Timestamper
Token Macro Plugin
Trilead API Plugin
Workspace Cleanup Plugin
pipeline 常用插件
在jenkins官方文档是这样介绍pipeline的:Jenkins Pipeline (or simply “Pipeline”) is a suite of plugins which supports implementing and integrating continuous delivery pipelinesinto Jenkins.它的意思就是pipeline是一套jenkins官方提供的插件,它可以用来在jenkins中实现和集成连续交付。
整个流程主要有以下几个模块组成:
1.agent
2.param
3.stage
首先介绍stage。pipeline实际上就是由很多个stage组成,每个stage完成一件事情。就像上图中第二个stage用来构建项目,第三个stage用来测试项目。所以定义pipeline实际上就是定义多个stage。而stage是由多个step组成,由step来定义这个stage是如何完成一个任务的。比如要执行test这个测试stage,通过step定义第一步拉取代码,第二步进行测试,第三步将测试结果发送邮件。
接着就是agent,agent是用来定义CI/CD流程环境的,比如你在构建gradle项目的时候需要gradle环境,这时候就由agent来定义。agent可以定义全局的,就是所有的stage都会在这个环境中进行,也可以放在stage中,意味这只有该stage会放在这个环境中执行。
然后就是param。param是为整个流程提供参数的。这一点是很好的,比如你使用git进行代码管理,你需要构建某个流程,这时候你只要在构建的时候指定分支参数就可以构建项目。
最后,还有其他部分,比如所有的stage都执行完成了,或者失败了,这时候你需要发送邮件,你可以在最后的部分定义发送邮件,不论构建成功与否。
完成ci阶段的插件
build timeout 构建超时
首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。
那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。
而我们通常说的LDAP是指运行这个数据库的服务器。
可以简单理解AD =LDAP服务器+LDAP应用。
用树形结构存储数据,查询效率更高(具体为什么,可以看一下关系型数据库索引的实现原理——B树/B+树)。在某些特定的场景下,使用树形数据库更理想。比如:需要储存大量的数据,而且数据不是经常更改,需要很快速的查找。
LDAP是一个目录形式的数据库
Ant是Java的生成工具,是Apache的核心项目;
Ant类似于Unix中的Make工具,都是用来编译、生成;
Ant是跨平台的,而Make不能;
Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目。
若是使用别的浏览器,需要使用汉化包插件,使用谷歌可以自动翻译
配置jdk全局环境 全局配置jenkins
maven项目管理
java项目编译器
#管理jenkins —> 全局工具配置 —>
别名要去指定路径
别名 | JAVA_HOME | ||
JAVA_HOME | /usr/local/java/ |
勾选install代表自行向官网下载,这里已经安装过了,取消勾选
然后再点应用,然后保存
安装推荐插件时已经安过了,这里做一个未安装时的演示
再创建一个,以作验证使用
Role-based Authorization Strategy
切换管理员账户
授权插件
这两个插件时一起使用的
刚才创建的gsy和shl此时无法管理
此时没有找到对应的插件
备注:此时是管理员admin身份状态
不给权限
Pattern 是匹配任务的名字,也就是创建的任务名称
谷歌翻译如下
记得应用保存
admin具有admin角色的权限
gsy具有gsy角色的权限
点击应用,点击保存
此时的项目时空的