欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Jenkins+Docker持续集成的实现

程序员文章站 2023-03-24 21:42:40
一、jenkins介绍jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。二、安装部署jenkin...

一、jenkins介绍

jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

二、安装部署jenkins

下载地址:

我这里下载war包安装,版本:1.642.3 lts .war

1. 环境信息

主机名 操作系统版本 ip地址 安装软件
osb30 redhat 6.5 172.16.206.30 jenkins

2. 新建jenkins用户

3. jenkins安装方式

安装jenkins有两种方式,tomcat方式部署和java部署启动。本次实验我以tomcat下部署启动为例。

(1)tomcat方式部署

a.首先安装tomcat和java,配置环境变量(此步骤不再讲述,java配置不可缺少)

我这里安装的是jdk 1.8.0_65。

b.将从官网下载下来的jenkins.war文件放入tomcat下的webapps目录下,进入tomcat的/bin目录下,启动tomcat即启动jenkins。

我这里用的是tomcat8。

c.启动jenkins时,会自动在webapps目录下建立jenkins目录,访问地址为:

如果启动时报错:

caused by:java.awt.awterror: can't connect to x11 window server using ':0' as the value of the display varible...

解决:

d.访问jenkins

http://172.16.206.30:8080/jenkins

(2)java部署启动jenkins

切换到jenkins.war存放的目录,输入如下命令:

可以修改启动端口

然后在浏览器中(推荐用火狐、chrom)输入http://localhost:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins;修改端口后,访问地址的端口需同步变更。

4. jenkins授权和访问控制

默认地jenkins不包含任何的安全检查,任何人可以修改jenkins设置,job和启动build等。显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题。 我们可以通过下面的方式来增强jenkins的安全:

访问jenkins:http://172.16.206.30:8080/jenkins

点击系统管理—> configure global security,点击”启用安全”,可以看到可以使用多种方式来增强jenkins的授权和访问控制:

Jenkins+Docker持续集成的实现

查看策略:

Jenkins+Docker持续集成的实现

如上图所示,默认是”任何用户可以做任何事情(没有任何限制)”。

我们在”安全域”选择”jenkins专有用户数据库”,”允许用户注册”;并先在“授权策略”点击“任何用户可以做任何事情(没有任何限制)”, 防止注册之后无法再管理jenkins。此时就可以刷新一下jenkins的页面看到右上角有登录、注册的按钮。

(1)注册管理员账号

a.点击注册,首先注册一个管理员账号。

Jenkins+Docker持续集成的实现

b.点击系统管理—> configure global security,在“授权策略”选择”安全矩阵”,添加用户/组——添加admin账户——为admin账户添加所有权限,为匿名用户勾选你希望对方了解的功能。

Jenkins+Docker持续集成的实现

【注意】:匿名用户一定要开启此处的可读权限,若不开启,后面github或者bitbucket的webhook自动构建会没有权限。

并且勾选上该项,点击保存。

Jenkins+Docker持续集成的实现

做完此部操作之后,即可用admin帐号登录,取消登录用户可以做任何事的权限。

以上操作,即可完成jenkins的授权和访问控制。

5. jenkins系统配置

登录jenkins——系统管理——系统设置,为jenkins添加上需要的功能配置,有如下几个方面:

Jenkins+Docker持续集成的实现

(1)jdk配置

在jdk的选项,点击”新增jdk”,取消自动安装,输入jdk别名(名称随意),java_home大家应该都很了解,在此处填写jenkins所在服务器安装的java程序的home位置即可,根据不同操作系统填写不同路径,如win7 d:\java\jdk1.8 linux /usr/lib/jvm/jdk1.7.0_51。

Jenkins+Docker持续集成的实现

设置完了请记得保存。

(2)git/svn版本控制添加

根据使用的版本选择控制版本的应用程序的路径,如jdk配置即可。

Jenkins+Docker持续集成的实现

【注意】:如果使用git作为版本控制库,jenkins默认情况下是没有安装git的。我们需要到插件管理界面中选中git,然后点击直接安装。

点击系统管理—>管理插件—>可选插件,在右上角”过滤”处输入git进行搜索:

Jenkins+Docker持续集成的实现

找到git client plugin和git plugin,在前面打上√,点击直接安装。

Jenkins+Docker持续集成的实现

安装插件中。。。

Jenkins+Docker持续集成的实现

安装成功后,重启jenkins。

(3)jenkins添加maven配置

先判断jenkins所在主机是否安装了maven:

如果没有安装,请先安装maven。

a.centos 安装maven

b.jenkins配置maven

安装完成后,登录jenkins。点击系统管理—>系统设置。

Jenkins+Docker持续集成的实现

三、jenkins构建maven风格的job

1. 新建maven任务

登录jenkins,点击新建。输入item名称,选择“构建一个maven项目”,点击ok。

Jenkins+Docker持续集成的实现

2. 构建任务配置

Jenkins+Docker持续集成的实现

3. 源码管理配置

进入配置页面,找到”源码管理”。我这里是svn,输入项目所在版本库的地址。

Jenkins+Docker持续集成的实现

4. 构建触发器配置

在”源码管理”下面是”构建触发器”。

”构建触发器”是一个持续集成的触发器插件,可以根据已经完成构建的结果,触发新job或者传递参数。默认的选项是build whenever a snapshot dependency is built,意思是依赖于快照的构建,意思是依赖于快照的构建,当代码有更新时就构建项目。

build periodically和poll scm可以设置定时自动构建。两者区别如下:

  • poll scm:定时检查源码变更(根据scm软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
  • build periodically:定时进行项目构建(它不care源码是否发生变化)。

我这里设置为每12小时构建一次。

Jenkins+Docker持续集成的实现

5. maven构建设置

(1)pre step

pre steps选项用来配置构建前的工作,这里不作更改。

(2)配置root pom和goals and options

因为是maven项目,所以build选项有root pom和goals and options的设置。root pom:填写你项目的pom.xml文件的位置,注意:是相对位置,如果该文件不存在,会有红色字提示。

比如我这里是:

Jenkins+Docker持续集成的实现

(3)post steps

在maven项目创建完成后,我们还需要实现每次构建完成,将war发布到阿里云主机上,以实现自动发布。我们通过添加shell实现自动发布。

找到post steps下有个execute shell:

【注意】:jenkins在执行该shell脚本的时候是以jenkins这个用户身份去执行。某些场景下请注意环境变量path。

配置阿里云主机信任内网的这台jenkins主机:

由于是war包在内网服务器上,发布的环境是在阿里云主机上,所以要配置主机互信,防止scp war包时还需要输入密码。我这里内网服务器ip是172.16.206.30,外网是114.55.29.246。

四、jenkins邮件通知设置

1. 配置jenkins自带的邮件功能

(1)找到系统设置

Jenkins+Docker持续集成的实现

(2)填写系统管理员邮箱

Jenkins+Docker持续集成的实现

【注意】:这个系统管理员邮件地址一定要填写,否则邮件发不出去,连下面的测试邮件都发不出去。

(3)找到邮件通知,输入smtp服务器地址,点击高级,输入发件人帐号和密码

Jenkins+Docker持续集成的实现

(4)勾选上”通过发送测试邮件测试配置”,然后输入收件人帐号

Jenkins+Docker持续集成的实现

此时我们已经可以发送邮件了。在具体job配置处,找到”构建设置”,输入收件人信箱,但是你会发现只能在构建失败时发邮件。可以安装插件email extension plugin来自定义。

Jenkins+Docker持续集成的实现

2. 安装使用插件email extension plugin

(1)安装插件email extension plugin

该插件支持jenkins 1.5以上的版本。

在系统管理-插件管理-安装email extension plugin。它可根据构建的结果,发送构建报告。该插件支持jenkins 1.5以上的版本。

Jenkins+Docker持续集成的实现

【注意】:安装完如果使用email extension plugin,就可以弃用自带的那个邮件功能了。

(2)配置使用插件email extension plugin

点击”系统配置”—>”系统设置”。

Jenkins+Docker持续集成的实现

找到extended e-mail notification处,输入如下的配置:

Jenkins+Docker持续集成的实现

【注意】:上面的user name和password需要点开“高级设置”后才能看到,必须输入用户名和密码,否则邮件发不出去。

Jenkins+Docker持续集成的实现

点击下面的保存。

然后去job配置页面激活这个插件。找到需要发邮件的项目,点击进去。

Jenkins+Docker持续集成的实现

点击配置,点击”增加构建后操作步骤”,选择editable email notification。

Jenkins+Docker持续集成的实现

附上构建日志,点击高级设置。

Jenkins+Docker持续集成的实现

配置triggers:

Jenkins+Docker持续集成的实现

更详细的介绍:

五、sonar

官方文档:http://docs.sonarqube.org/display/sonarqube45/documentation

1. sonar简介

sonar是一个用于代码质量管理的开源平台,用于管理java源代码的质量。通过插件机制,sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

与持续集成工具(例如 hudson/jenkins 等)不同,sonar 并不是简单地把不同的代码检查工具结果(例如 findbugs,pmd 等)直接显示在 web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,sonar 不仅提供了对 ide 的支持,可以在 eclipse 和 intellij idea 这些工具里联机查看结果;同时 sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 sonar。

此外,sonar 的插件还可以对 java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

2. 环境要求

http://docs.sonarqube.org/display/sonar/requirements

3. 新建用户

4. 安装jdk

5. 安装配置数据库

6. 安装sonar

我这里用的版本是sonarqube 4.5.7 (lts *),上传该软件到sonar用户的家目录下。

修改如下字段(就是配置数据库信息,其他不用动):

7. 启动sonar

sonar默认集成了jetty容器,可以直接启动提供服务,也可以通过脚本构建为war包,部署在tomcat容器中。

sonar默认的端口是”9000”、默认的上下文路径是”/”、默认的网络接口是”0.0.0.0”,默认的管理员帐号和密码为:admin/admin,这些参数都可以在配置文件sonar.properties中修改。我这里修改下port,因为本机的9000端口被其他程序占用了。

查看日志:

可以看到第一次启动时,初始化语句:

Jenkins+Docker持续集成的实现

8. 关闭sonar

9. 访问sonar

浏览器输入http://172.16.206.30:9003/

默认的管理员帐号和密码为:admin/admin。

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

10. sonar插件

sonar支持多种插件,插件的下载地址为:http://docs.codehaus.org/display/sonar/plugin+library

将下载后的插件上传到${sonar_home}extensions\plugins目录下,重新启动sonar。

sonar默认集成了java ecosystem插件,该插件是一组插件的合集:

  • java [sonar-java-plugin]:java源代码解析,计算指标等
  • squid [sonar-squid-java-plugin]:检查违反sonar定义规则的代码
  • checkstyle [sonar-checkstyle-plugin]:使用checkstyle检查违反统一代码编写风格的代码
  • findbugs [sonar-findbugs-plugin]:使用findbugs检查违反规则的缺陷代码
  • pmd [sonar-pmd-plugin]:使用pmd检查违反规则的代码
  • surefire [sonar-surefire-plugin]:使用surefire执行单元测试
  • cobertura [sonar-cobertura-plugin]:使用cobertura获取代码覆盖率
  • jacoco [sonar-jacoco-plugin]:使用jacoco获取代码覆盖率

11. 与jenkins集成

可以通过maven集成,也可以直接与jenkins集成。我这里选择直接与jenkins集成。

(1)修改maven的主配置文件(${maven_home}/conf/settings.xml文件或者 ~/.m2/settings.xml文件),在其中增加访问sonar数据库及sonar服务地址,添加如下配置:

(2)在jenkins的插件管理中选择安装sonar jenkins plugin,该插件可以使项目每次构建都调用sonar进行代码度量。

a.安装插件

Jenkins+Docker持续集成的实现

b.系统配置添加sonar的配置

进入系统配置页面对sonar插件进行配置,如下图:

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

然后点击下面的保存。

c.配置构建项目,增加post build action

点击要构建的项目,在点击左侧的配置。

Jenkins+Docker持续集成的实现

在页面的最下面找到”构建后操作”,选择sonarqube。

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

it is no longer recommended to use sonarqube maven builder. it is preferable to set up sonarqube in the build environment and use a standard jenkins maven target.

【解决】:
http://docs.sonarqube.org/display/scan/analyzing+with+sonarqube+scanner+for+jenkins

修改build处:

Jenkins+Docker持续集成的实现

最后去jenkins构建项目,构建完查看sonar控制台:

Jenkins+Docker持续集成的实现

12. 常见问题

jenkins构建完成后,sonar扫描代码报错:

Jenkins+Docker持续集成的实现

解决: 卸载sonar的javascript插件。

六、jenkins与docker结合

我这里没有使用docker pipeline,直接在构建完成后,执行shell脚本,这样更灵活。

1. 部署流程

  • 研发push到svn代码库
  • jenkins 构建,pull svn代码 使用maven进行编译打包
  • 打包生成的代码,生成一个新版本的镜像,push到本地docker仓库harbor
  • 发布,测试机器 pull 新版本的镜像,并删除原来的容器,重新运行新版本镜像。

2. 环境说明

主机名 操作系统版本 ip地址 用途 安装软件
osb30 redhat 6.5 172.16.206.30 svn代码库、jenkins、docker jenkins、svn、docker 1.7.1
spark32 centos 7.0 172.16.206.32 本地docker仓库、业务部署测试环境 harbor、docker 17.06.1-ce

3. 配置

由于在jenkins机器上docker是使用root用户运行的,而jenkins是使用普通用户jenkins运行的,所以要先配置下jenkins用户可以使用docker命令。

另外在jenkins机器上配置:

如果不配置这个,在执行下面脚本时,会报错误:

在172.16.206.32机器上配置:

否则在机器172.16.206.32机器上执行脚本时会报错:

4. 安装插件

登录jenkins,点击“系统管理”,点击“管理插件”,搜索插件“ssh plugin”,进行安装。

登录jenkins,点击“credentials”,点击“add domain”。

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

点击“系统管理”,“系统配置”,找到“ssh remote hosts”。

Jenkins+Docker持续集成的实现

5. 配置post steps

项目其他的配置不变,见上面的章节。

【注意】:脚本中用到的仓库和认证的账号需要先在harbor新建好。

Jenkins+Docker持续集成的实现

Jenkins+Docker持续集成的实现

到此这篇关于jenkins+docker持续集成的实现的文章就介绍到这了,更多相关jenkins docker持续集成内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!