Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
官方插件下载Jenkins Plugins https://plugins.jenkins.io
jenkins的插件以及配置
jenkins系统管理比较重要的就是插件管理了 ,因为jenkins的工作全部是由插件来完成。
在插件管理中,有可更新、可选插件、已安装,日常的插件安装都是在这个界面上完成的。比如为了和gitlab协同,我们需要安装gitlab的插件。
jenkins安装插件的两种方式
参考URL: https://www.jianshu.com/p/3b5ebe85c034
Manage Jenkins -> Manage Plugins --> Avialable 菜单下 搜索直接安装。
总结:经过测试,发现jenkins 安装一些插件时,发现很多插件又依赖其它插件,因此,强烈推荐采用第一种方式安装,它会自动帮你安装依赖的插件。
Jenkins系列-Jenkins插件下载镜像加速
参考URL: https://www.cnblogs.com/zhuochong/p/10082498.html
我这里配置为 清华站点
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
再安装插件:
Localization: Chinese (Simplified)
安装完成后,重启jekins,再登录发现已经变成中文了。
jenkins + Git 搭建持续集成环境
参考URL: https://www.cnblogs.com/Leo_wl/p/5125855.html
Jenkins 配置GitLab插件和Git插件
参考URL: https://cloud.tencent.com/developer/article/1360527
gitlab创建个人访问令牌(personal access token)
参考URL: https://blog.csdn.net/NGU2028070003/article/details/86634474
我们的产品使用Git作为版本管理工具,而jenkins需要git插件来支持git,所以我们需要为jenkins添加git插件。
安装 GitLab 插件,(GitLab 依赖 Git插件 安装GitLab即可)
插件关键字 GitLab
配置GitLab
浏览器登录Jenkins Web UI,点击 Manage Jenkins(系统管理),再点击 Confinure System(系统设置), 点击左上角导航 配置 下拉框,点击Gitlab选项,可快速定位
a, Connection Name随便填;
b, Git Host URL填GitLab的域名地址,例如http://gitlab.yourdomain.com/;
c, Credentials配置;
点击Add下拉框,点击jenkins;弹出框里,
类型支持多种gitLab认证,账号密码/API token等。
这里我们使用gitLab API token方式:
打开GitLab(例如公司内网的GitLab网站),点击个人设置菜单下的setting,再点击Account Tokens菜单,创建API token,复制Private token
关于创建API token可以参考如下链接:
gitlab创建个人访问令牌(personal access token)
参考URL: https://blog.csdn.net/NGU2028070003/article/details/86634474
kind选择GitLab API Token,将之前复制备用的Private token粘贴到API token输入框中,然后点击添加。
选择刚刚新建的Credentials,测试一下能否连接成功,点击Test connection,正常应该返回Success
d, 完成后点击页面底部的应用,再点击保存。
Jenkins–创建自己的第一个Jenkins任务
参考URL: https://blog.csdn.net/pcaiyue/article/details/80340699
至此,我们应该是可以利用git,下载代码了。
进入Jenkins,点击左侧新建任务,点击构建一个自由风格的软件项目,点击确定。
注意:默认是不支持构建maven 项目的,需要安装插件。因为我们java项目大多是maven管理构建的,所以我们需要安装maven插件(Maven Integration)。请参考文件后面部分。
[推荐-文章质量比较高]Jenkins的安装和构建一个Maven项目
参考URL: https://blog.51cto.com/13581826/2095876
jenkins 构建一个maven项目
参考URL: https://www.cnblogs.com/kakaln/p/9821900.html
Jenkins配置(Jenkins如何与maven项目进行连用)
参考URL: https://www.cnblogs.com/chongyou/p/8603950.html
Jenkins Maven安装设置
参考URL: https://www.yiibai.com/jenkins/jenkins_maven_setup.html
[推荐-全面]使用Jenkins来自动打包和部署Maven工程【持续集成】
参考URL: https://blog.csdn.net/pucao_cug/article/details/82531681
当我们需要部署自动发布java代码时,就需要使用创建一个maven projent功能,默认是不支持构建maven 项目的,需要安装插件。
如下内容显示安装插件
Maven Integration
注意:Jenkins创建项目时没有maven项目是因为缺少插件 Maven Integration plugin。
安装Maven Integration提醒失败,说是缺少javadoc
因此,javadoc就在其依赖插件列表中,猜测是下载javadoc插件失败导致,因此,单独再搜索一次javadoc,先安装javadoc确定安装ok,再次搜索 Maven Integration安装即可。
全局工具配置–配置jdk
如下图配置jdk
全局工具配置–配置maven
在全局配置里面配置东西,是全局的会影响到所有新建的Job,当然新Job可以基本都可以覆盖配置的全局配置。
在加入一些插件后,全局配置就会多一些内容,根据自己需要查看后面章节学习。如添加了Publish over SSH插件后,全局配置里面就会有关Publish over SSH的配置。
配置项目中的 源码管理
注意:今天因为这里的凭证没有选对,浪费很多时间。 没有选对,这个界面给的打印信息有限,有一个技巧,就是你保存这个任务,然后手动点击构建,查看构建日志错误信息,非常详细,认证错误会打印出来!
我这里错误的原因是:我之前下jekins插件配置了一个代理,这里给git下载代码也会走 jekins插件那里配置的代理,请注意!
配置 Build参数
往下找到Buid选项卡
配置项目中的构建(使用maven构建包)
然后点击“高级”
root pom:表示执行jenkins项目构建的时候,会从pom.xml文件开始执行
在Root POM处填写自己工程的pom.xml文件名称,我这里填写“pom.xml”在Goals and options处填写自己要执行的maven命令,我这里填写“clean install”,MAVEN_OPTS处可以填写一些JVM参数,例如可以指定对内存大小,指定maven使用的字符编码等,我这里使用JVM默认的内存大小,只指定字符编码为UTF-8,所以只填写“-Dfile.encoding=UTF-8”。
在往下,勾选上“使用自定义的工作空间”,如图
在目录这个地方,填写你git要下载源码编译构建的路径,它会往这个目录里面下载源码,并编译。
至此,基本的操作都完了。
不过还有以下内容需要做完了,下面对一些细节分类整理,完成这些细节,才算比较完整,参考下面子标题内容
假设自定义的仓库路径为“/opt/repository”,那么在“系统管理-系统设置”中,修改“全局MAVEN_OPTS”的值为如下的内容:
强制指定本地仓库的路径.
-Dmaven.repo.local=/opt/repository
maven配置中填写,maven setting.xml地址
Jenkins构建项目的时候,有时候执行大量的单元测试用例需要浪费很多时间,又或者测试环境与其他dubbo,zookeeper服务器环境不通执行失败,
为了更快速的构建,可在build选项中使用如下命令不执行单元测试用例
-Dmaven.test.skip=true 表示在打包时不执行测试用例
Jenkins的console控制台中文乱码
参考URL: https://blog.csdn.net/duzilonglove/article/details/78908562
一般来说,所有的乱码都是编码问题造成的。
解决方案:
一、将Jenkins部署到linux服务器下面;
二、如果非要在windows下部署:
请参考下面步骤:
1、Jenkins->系统管理->系统设置,在全局属性新建变量
键为:LANG
值为:zh_CN.UTF-8
2、你的电脑添加环境变量
键=JAVA_TOOL_OPTIONS
值=-Dfile.encoding=UTF-8
3. 重启jenkins
查看jenkin 系统管理–>系统参数,查看是否ok
系统属性
环境变量
Jenkins——应用篇——插件使用——Publish over SSH
参考URL: https://blog.csdn.net/houyefeng/article/details/51027885
Publish over SSH插件安装
参考URL: https://www.cnblogs.com/dadonggg/p/8350472.html
Jenkins Publish over ssh部署(学习笔记十四)
参考URL: https://www.jianshu.com/p/dd2eb30c4a63
如下,进入 系统配置
配置 Publish over SSH,下ssh servers配置
Passphrase:SSH的密码
使用用户名/密码登录时为用户名的密码,使用私钥登录时为私钥的密码。
Path to key:SSH私钥的文件路径
私钥文件的路径,可以是绝对路径,也可以是相对$JENKINS_HOME的相对路径
Key:私钥
私钥导出后的文本内容
如果“Key”和“Path to key”都设置,则“Key”的优先级较高,私钥的密码是“Passphrase”中设置的内容。
Disable exec:禁止在目标机上执行命令
勾选后将会忽略在Job配置中“Exec command”选项中设置的命令。Jenkins的说明文档中的“The Disable exec in the advanced settings for individual configurations will be ignored.”没有完全理解,从实际效果来看,只要“Disable exec”被勾选后,不管SSH Server中是否勾选“Disable exec”,Job中设置的命令都将补忽略。
在Jenkins中配置Job,
在Job设置中“增加构建步骤”里选择“Send files or execute commands over SSH”
配置如下图
参数说明
Exec command
在这里可以填写在运程机器上执行的脚本,如:应用部署脚本。
使用maven编译,又使用lib下的Jar包
参考URL: https://www.jianshu.com/p/994ce061c9d4
在项目开发中,项目用maven管理,是一个maven项目。
一般情况下jar包都可以使用pom.xml来配置管理,但也有一些时候,我们项目中使用了一个内部jar文件,但是这个文件我们又没有开放到maven库中。
使用compilerArgs标签
org.apache.maven.plugins
maven-compiler-plugin
1.8
UTF-8
-Xlint:unchecked
-Xlint:deprecation
-bootclasspath
${env.JAVA_HOME}/jre/lib/rt.jar
-extdirs
${project.basedir}/src/main/lib
maven的目录约定:
pom.xml所在的目录应为项目的根目录,假设该目录为${proj-dir},那么Maven有以下假设:
${proj-dir}/src/main/java —— 存放项目的.java文件。
${proj-dir}/src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件。
${proj-dir}/src/test/jave —— 存放所有测试.java文件,如JUnit测试类。
${proj-dir}/src/test/resources —— 测试资源文件。
${proj-dir}/target —— 项目输出位置。
Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块
参考URL: https://www.cnblogs.com/EasonJim/p/8350578.html
Maven单独构建多模块项目中的单个模块
参考URL: https://www.cnblogs.com/EasonJim/p/8350560.html
说明:
1、可能存在的场景,多模块项目没有互相引用,那么此时可以单独构建单个项目,指定到子模块的pom.xml文件即可完成编译。
2、如果多模块项目各自都引用了,那么单独编译子模块的pom.xml文件会直接报错,解决方法就是编译父项目pom.xml。
3、如果编译父项目,那么可能会造成编译时间很慢,其中有些项目也不需要编译,解决方法如下:
解决方法:
Maven选项:
-pl, --projects
Build specified reactor projects instead of all projects
-am, --also-make
If project list is specified, also build projects required by the list
-amd, --also-make-dependents
If project list is specified, also build projects that depend on projects on the list
首先切换到工程的根目录
单独构建模块jsoft-web,同时会构建jsoft-web模块依赖的其他模块
mvn install -pl jsoft-web -am
单独构建模块jsoft-common,同时构建依赖模块jsoft-common的其他模块
mvn install -pl jsoft-common -am -amd
Jenkins利用GitLab Webhook触发代码提交自动构建任务
参考URL: https://blog.csdn.net/z8414/article/details/78363260
Gitlab自动触发Jenkins构建打包
参考URL: https://mp.csdn.net/mdeditor/92831511
第一次打开查看的时候是禁用模式
选择该条服务,右键-属性,点击服务状态下的启动(启动类型选择自启动),点击确认按钮
当jenkins服务显示正在运行中时,才表示jenkins服务启动成功
什么是 CI/CD?
参考URL: https://www.redhat.com/zh/topics/devops/what-is-ci-cd
[推荐]DevOps 不等于 CI,也不等于 CI /CD
参考URL: http://www.sohu.com/a/219547745_151779
详解CI、CD相关概念
参考URL: https://blog.csdn.net/sinat_35930259/article/details/79429743
持续集成(CI)、持续部署(CD)、持续交付(CD)需要经历那些过程
参考URL: https://blog.csdn.net/cdbdqn001/article/details/85787281
常见开发工作流程分为以下几个阶段:
编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署
持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
它的好处主要有两个:
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
CI/CD 中的“CI”始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤。
持续部署(另一种“CD”)指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。
归根结底,纠缠于这些语义其实并无必要,您只需记得 CI/CD 实际上就是一个流程(通常形象地表述为管道),用于在更大程度上实现应用开发的持续自动化和持续监控。