网站建设经理,网站视频怎么做的,网页图片大全,创建网页用什么软件1. 简述什么是Jenkins #xff1f;
Jenkins是一个开源的持续集成的服务器#xff0c;Jenkins开源帮助我们自动构建各类项目。 Jenkins强大的插件式#xff0c;使得Jenkins可以集成很多软件#xff0c;可以帮助我们持续集成我们的工程项目#xff0c;对于我们测试来说
Jenkins是一个开源的持续集成的服务器Jenkins开源帮助我们自动构建各类项目。 Jenkins强大的插件式使得Jenkins可以集成很多软件可以帮助我们持续集成我们的工程项目对于我们测试来说同样可以使用它来为我们做一些自动化的构建可以结合JMeter、RobotFramework等等。
想象一下这个场景我们实际的项目中经常会遇到这种情况客户临时提出一个需求让我们短时间内做出一个产品原型然后客户看了满意之后再在这个产品原型的基础上提出一些新的需求点然后不断迭代这个过程。 如果我们按照原来的瀑布流程来开发产品肯定是无法完成这个任务的首先就卡在需求上因为客户无法提供完整的需求我们就无法根据需求来开发一个完成度很高的产品那么客户就会产生不满公司拿不到项目会因此丢单。 其次时间问题无法短时间内完成一个高完成度的产品如果赶工可能会存在产品有重大缺陷无法被发布之前就发现导致公司由此蒙受损失。 为了避免以上这些风险持续集成就成了一个很好的解决问题方案它能保证团队开发人员提交代码的质量减轻了软件发布时的压力 •持续集成中的任何一个环节都是自动完成的无需太多的人工干预有利于减少重复过程以节省时间、费用和工作量。
2. 列出 Jenkins 的一些特性
Jenkins 具有以下特点: 开源免费 全面的插件和集成集 卓越的社区和文档 基于 Java,因此易于在任何平台上设置、安装和使用。 确保采用主从架构的分布式构建,减少 CI 服务器负载。
3. 简述使用 Jenkins 有什么要求?
Jenkins 需要以下内容: 可访问的源代码存储库,例如 Git 存储库。 存储库中的工作构建脚本,如 Maven 脚本。
4. 简述Jenkins 有什么优势?
Jenkins 有几个优点,包括: 1 您可以在集成阶段缓存构建失败。 2 每次代码提交更改都会生成自动构建报告。 3 它与 LDAP 邮件服务器集成,以在构建报告成功或不成功时发送通知。 4 实现持续集成、测试驱动开发、敏捷开发。 5 使用简单的步骤,您可以自动化 Maven 发布项目。 6 在开发环境中跟踪错误比在生产环境中更容易
5. 简述Jenkins 中实用的插件?
#1Rebuilder。 官方地址https://plugins.jenkins.io/rebuild 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明此插件可以直接重复上次构建也可以用于查看一些参数比较复杂的构建时上次构建所选的参数是什么。非常nice的一个插件。
#2AnsiColor。 官方地址https://plugins.jenkins.io/ansicolor 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明扩展支持我们在shell当中定义的echo -e指令从而给一定的输出上颜色。 使用方式点此跳转到使用介绍。(opens new window) #3Maven Release Plug-in。 maven风格插件。安装方式在Jenkins插件当中直接搜索即可安装。
#4user build vars。 官方地址https://wiki.jenkins.io/display/JENKINS/BuildUserVarsPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明通过此插件让整个Jenkins系统中的用户参数成为一个可调用的变量。 使用方式在构建环境中选中Set Jenkins user build variables。 选中之后即可在当次构建的全程里调用对应的变量了。 变量分为如下几种 Full name 全名 BUILD_USER_FIRST_NAME名字 BUILD_USER_LAST_NAME 姓 BUILD_USER_ID Jenkins用户ID BUILD_USER_EMAIL 用户邮箱
#5Active Choices Plugin 官方地址https://wiki.jenkins.io/display/JENKINS/ActiveChoicesPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明根据所选参数自动调出对应参数所依赖的后续参数。 使用方式点此跳转到使用介绍。(opens new window)
#6build-name-setter 官方地址http://wiki.jenkins.io/display/JENKINS/BuildNameSetterPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明通过这个插件可以动态更改项目构建的名称。不要小瞧这个功能有时候合理应用对于工作的效率提升可是非常高的。比如常用的钉钉插件推送的信息过于简单有一些信息无法从中得知其实它推送的就是项目构建的名称这个时候我们可以通过更改项目名称来直接将一些构建的变量进行传递。 使用方式可以通过这样一个妙用示例对其进行理解。(opens new window)
#7Email Extension Template 官方地址https://wiki.jenkins.io/display/JENKINS/Email-extplugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明Jenkins部署状态邮件通知插件。 使用方式可以通过这样一个妙用示例对其进行理解。(opens new window)
#8description setter 官方地址https://wiki.jenkins.io/display/JENKINS/DescriptionSetterPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明可以在构建名称下定义一些描述信息的插件也是非常好用的插件。 使用方式可以通过这样一个妙用示例对其进行理解。(opens new window)
#9Git Parameter 官方地址http://wiki.jenkins-ci.org/display/JENKINS/GitParameterPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明在参数化构建步骤当中可添加Git的branch或者tag来作为参数进行构建。 使用方式可以通过这样一个妙用示例对其进行理解。(opens new window)
#10Role-Based Strategy 官方地址https://wiki.jenkins.io/display/JENKINS/RoleStrategyPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明生产当中常用的Jenkins用户视图权限管理插件。 使用方式可以通过这样一个妙用示例对其进行理解。(opens new window)
#11Job Configuration History Plugin 官方地址https://wiki.jenkins.io/display/JENKINS/JobConfigHistoryPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明jenkins配置当中的后悔药如果你更改了某个配置但是现在又想更改回去没有备份而且忘了那么可以使用这个插件。 使用方式提供有diff对比功能以及回滚功能。 非常友好的配置更改历史记录image查看不同以及配置回滚这里就不演示了。
#12Simple Theme 官方地址http://afonsof.com/jenkins-material-theme/?tdsourcetags_pctim_aiomsg 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明可以自定义Jenkins主题的插件。 使用方式使用方式见官方网站的说明配置起来非常简单。
#13Build Trigger Badge 官方地址https://wiki.jenkins-ci.org/display/JENKINS/BuildTriggerBadgePlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明能够在项目视图首页展示项目构建人的插件。 使用方式事实上这个功能之前我已经在可以通过这样一个妙用示例对其进行理解这篇文章里通过智慧使用其他方式实现了只不过现在这个插件可以直接实现对应的功能。如果首页视图当中看不到可以通过编辑视图添加cause即可看到。
#14Console Column Plugin 官方地址https://wiki.jenkins.io/display/JENKINS/ConsoleColumnPlugin 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明能够在项目视图首页展示项目构建输出面板的地址。 使用方式首页视图中可以通过编辑视图添加Last Console即可看到。
#15Display Console Output Plugin 官方地址https://plugins.jenkins.io/display-console-output 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明点击项目构建之后可以直接在当前窗口显示构建日志。 使用方式安装之后默认启用随便点击一个自由风格的项目构建即可看到效果。
#16Version Number 官方地址https://plugins.jenkins.io/versionnumber/ 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明通过插件的方式提供更加丰富的构建版本号 使用方式安装之后默认启用随便点击一个自由风格的项目构建即可看到效果。
#17figlet-buildstep 官方地址https://plugins.jenkins.io/figlet-buildstep/ 安装方式在Jenkins插件当中直接搜索即可安装。 功能说明这个插件允许你在构建过程中输出一个简单的横幅。 使用方式使用方法我们可以在流水线语法中直接获取 figlet ‘“start build”’ 如上代码放到任意地方会得到如下输出 008k1Yt0gy1gtldstgu9uj60w80e20u902
6. 解释如何将 Jenkins 从一台服务器移动或复制到另一台服务器?
Jenkins作为一款流行的开源CI/CD工具,在实际使用过程中难免会遇到需要迁移的情况,比如主机更换、目录迁移等。本文将提供Jenkins迁移的完整步骤与指南。 准备工作 在正式迁移Jenkins之前,需要准备好以下环境:
新的Jenkins主机:可以是物理机、虚拟机或Docker,需要提前安装好Jenkins及其运行依赖。相同的Jenkins版本:新老主机上的Jenkins版本需要保持一致,否则可能导致配置或数据不兼容的问题。相同的插件版本:如果有使用到第三方插件,插件版本也需要一致,以防止出现问题。备份原Jenkins数据:为安全起见,在迁移前先备份Jenkins的主目录,以备还原或比对数据。服务停止计划:为避免Jenkins服务中断,需要提前计划好切换时机,停止原Jenkins服务并启动新服务。 迁移步骤拷贝Jenkins主目录:Jenkins主目录包含Jenkins的配置、数据、插件等最关键信息,必须完整拷贝。目录默认路径为/var/lib/jenkins。需要将jenkins主目录原有数据拷贝到新的机器或者新目录下主要包含config.xml文件以及jobs、users、workspace、plugins四个目录然后重启jenkins即可拷贝日志文件:如需要登录审计,可以选择拷贝Jenkins的日志文件。目录默认为/var/log/jenkins。拷贝环境配置:拷贝Jenkins的环境配置文件/etc/sysconfig/jenkins和服务脚本/etc/init.d/jenkins。确认权限和用户:确认新目录的权限和所属用户与原目录相同。Jenkins需要对主目录有读写权限。配置环境变量:配置JENKINS_HOME环境变量,指向新主目录路径。启动Jenkins服务:在新主机上启动Jenkins服务,命令为service jenkins start或systemctl start jenkins。Jenkins重新配置:登录Jenkins web界面,重新配置管理员用户、插件管理器源等信息。测试与切换:进行测试,确保新Jenkins工作正常。然后停止原Jenkins服务,使用新的Jenkins服务。后续监控:Jenkins迁移后,需持续监控Jenkins运行状况,确保服务稳定。出现问题及时还原或处理。
7. 简述可以使用哪些命令手动启动 Jenkins?
Jenkins 可以通过以下两种方式手动启动: (Jenkins_url)/restart: 强制重启 Jenkins 而不等待当前构建完成。 (Jenkin_url)/safeRestart: 它让所有正在运行的构建完成
8. 如何保证 Jenkins 的安全
确保 global security 配置项已经打开。 确保用适当的插件将 Jenkins 与企业员工目录进行集成。 确保启用项目矩阵的权限访问设置。 通过自定义版本控制的脚本来自动化 Jenkins 中设置权限/特权的过程。 限制对 Jenkins 数据/文件夹的物理访问。 定期对其进行安全审核。
9. 简述如何配置 Jenkins 的 job
转到 Jenkins 首页选择“New Job”然后选择“Build a free-style software project”。然后你可以设置这个自由式 job 的元素 可选的 SCM例如源代码所在的 CVS 或 Subversion。 用于控制 Jenkins 何时执行构建的触发器。 某种构建脚本用于执行实际工作的构建antmavenshell 脚本批处理文件等。 从构建中收集信息的可选步骤例如归档制品、记录 javadoc 和测试结果。 配置构建结果通知其他人/系统的步骤例如发送电子邮件、即时消息、更新问题跟踪器等。
10. 简述Jenkins 如何创建Pipeline
将其中一个示例复制到您的存储库并将其命名Jenkinsfile 单击Jenkins中的New Item菜单 new-item-selection 为您的新项目提供名称例如我的Pipeline然后选择多分支Pipeline 单击添加源按钮选择要使用的存储库的类型并填写详细信息。 点击保存按钮并观看您的第一条Pipeline运行 您可能需要修改一个示例Jenkinsfile以使其与您的项目一起运行。尝试修改sh命令以运行您在本地计算机上运行的相同命令。 设置你的Pipeline后Jenkins将自动检测在存储库中创建的任何新分支或拉请求并为其启动运行Pipeline。
11. Jenkins 主要集成的两个组件是什么?
Jenkin 主要由两部分组成: SVN、GIT 等版本控制系统 构建工具,例如 Apache Maven
12. 解释如何在 Jenkins 中创建备份和复制文件?
数据备份有两种办法一种是手动的一种是自动的。 1.手动备份 比较简单就像上述迁移步骤那样把原始机器上的数据打包。打包后有两种选择第一种是在原始机器上其他路径下创建一个文件夹把数据丢进去。例如原始机器上的数据是存储在/home/jenkins我们打包后可以放到/home/backups这样做的好处是如果误删了jenkins我们可以到backups下找回原始数据第二种是将打包的文件拷贝到另外一台物理机上这样做的好处是如果原始机器宕机了我们可以在另外一台机器上找到备份文件在最短的时间内恢复工作。 2.自动备份 相对于手动备份我们也可以编写脚本实现自动备份例如linux系统中使用shell脚本如下命令可以实现备份 cp -r /home/jenkins/需要备份的文件夹名 /home/backups/目标文件夹名 注意命令中的两个路径之间是有空格的。 同理windows下可以使用批处理 xcopy D:\jenkins\需要备份的文件夹名*.* D:\backups\目标文件夹名\ /s /e 注意*.*后面有一个空格目标文件夹名后面有个斜杠不能丢你若皮可以丢一下试试看会有怎么样的效果 那么跨平台备份文件应该怎么办呢Linux的文件传到windows上windows的文件传到linux上。这里我们需要借助一个工具pscp安装好以后就可以直接用了。 Windwos传到linux命令如下 pscp D:\jenkins root192.168.0.15:/mnt/backups 其中?D:\jenkins是windows文件夹root是用户名后面是ip冒号后面是linux的文件夹 从linux传到windows把命令倒过来就行了如下 pscp root192.168.0.15:/mnt/backups D:\jenkins
13. 解释如何通过 Jenkins 克隆 Git 存储库?
Jenkins 需要您的 Jenkins 系统的用户名和电子邮件地址来克隆 Git 存储库。为此,您必须切换到您的作业目录并执行“git config”命令
14. 简述Jenkins整个工作流程
开发者检入代码到源代码仓库。CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时它将把源代码仓库的源码存放到对应的工作区。CI系统会在对应的工作区内执行构建过程。配置如果存在构建完成后CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。配置如果存在如果构建成功这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分也可以是一个外部的仓库诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。CI系统通常会根据请求发起相应的操作诸如即时构建、生成报告或者检索一些构建好的构件。
15. 请详细列举Jenkins各配置选项
#1 系统设置 此处定义Jenkins的全局消息或者是邮箱的配置。 #2 全局安全配置 主要是配置用户访问的控制这里仅开启允许用户注册这样的话可以让所有开发测试小伙伴在这里以自己的名字注册自己的账号然后运维管理人员根据他们不同的项目与权限进行规则的设置就行了。 #3 全局工具设置 里边包含了所有的代码库或者打包工具的位置根据情况进行设置就行。或者什么都不设置也可以。只不过以后脚本里边注意添加命令加载变量。 #4 管理插件 可参考https://www.w3cschool.cn/jenkins/jenkins-s5xk28l5.html 里边有丰富的插件提供详细的插件功能不多赘述有几个重要的需要在 ant打包的 LDAP就是上边的访问控制功能 Git从代码库拉取代码 Role-Based Strategy角色管理。 Email Extension Plugin (邮件通知) Publish Over SSH (远程Shell) Maven Integration pluginMaven集成否则新建的时候没有Maven Project Monitoring监控Jenkins所消耗的系统资源如内存使用等 #5 管理节点 如果服务器数量过于庞大则可能会使用到主从式的集群进行构建发布。 #6 管理用户 这些用户能够登录到Jenkins。这是列表的子集也包括那些只是提交了代码到某些项目但是从未登录Jenkins而自动创建的用户。这是官方的介绍点击用户后边的设置还可以更改他的信息以及密码的重置等。 #7 小黄锁。 需要安装插件Role-Based Strategy 此处可以参考 所有的用户分组规则权限都在这里设置了。管理角色是规则的设置 1全局变量的设置也可以理解成是组的添加设置这里只设置出了开发者一个组。也可以通过下边的add新增。他们对全局有读的权限就好了。 2项目的分组。这个地方有点像Git里边的权限了有分组的也有项目的经过这样两层的过滤基本上每个人都会有合适的权限了。 分配角色 这里边就是对每个人的权限进行具体的分配了。这里边的又是与上边全局配置的规则对应的因此先add把人添加进来然后在后边勾选合适的权限就可以了。 注意不同人身份的不同权限设置。 现在基本上对Jenkins的基础配置已经完成了接下来就能够进行项目的构建与部署了。
16. 简述Jenkins配置项目构建的钉钉通知
Jenkins配置钉钉的通知非常简单。 首先在任意一个钉钉群里创建自定义的钉钉机器人然后能够看到钉钉开放的webhook。 复制webhook。 Jenkins中安装钉钉插件然后在项目的配置当中构建后操作里添加钉钉报警
17. 简述Jenkins忘记管理员密码怎么办
一、admin密码未更改情况 1.进入\Jenkins\secrets目录打开initialAdminPassword文件复制密码 2.访问Jenkins页面输入管理员admin及刚才的密码 3.进入后可更改其他管理员密码 #二、admin密码更改忘记情况 1删除Jenkins目录下config.xml文件中下面代码并保存文件。 true true true false
2重启Jenkins服务 3进入首页“系统管理”“Configure Global Security”(全局安全配置) 4勾选“启用安全” 5点选“Jenkins专有用户数据库”并点击“保存” 6重新点击首页“系统管理”,发现此时出现“管理用户” 7点击进入展示“用户列表” 8点击右侧进入修改密码页面修改后即可重新登录。
18. 简述Jenkins与Gitlab的交互源码获取
1 直接通过其附带的Git插件来拉取代码。 通过在源码管理当中直接设置Git仓库的代码链接然后下边添加相对应的已注册用户账号密码如此就可以拉取到本地workspace里了。然后就能够针对代码进行操作了。 那么这种方式构建的项目分支切换更加灵活一般情况下构建记录当中所显现的代码变动记录也会非常大在真正构建之前都是代码变动的记录。 2 不通过Git插件对代码进行操作。 这种方式更适合于单一分支发布的情况一般线上正是环境都是只发master分支比较适合使用这种方式。 操作流程大概是这样首先在Jenkins所在服务器上对要工作的项目进行手动clone然后就可以在Jenkins这里直接对代码进行操作部署。 解释 首先是分支已经在master。 然后显示从Git库链接拉取更新。 下边就是一些详细更新内容的展示。 两种方式都是可以进行正常构建部署的。第一种更适合于测试环境中使用分支变动更加灵活第二种更适合于正式环境只针对单一分支进行部署更新。 而两种方式还有一个小区别第一种构建方式所有的代码变动更新都可以通过项目的变更记录里边看到但是第二种方式去到变更记录里边则全部是没有变动。有这个区别就不会在开发来找你问我代码有没有发上去而你在确认是否有发上去时–被动。
19. 简述Jenkins目录结构
jobs包含Jenkins管理的构建作业的配置细节、构建产物和数据 logs日志目录 plugins存放jenkins已安装插件的相关文件下载的推荐插件都在这个目录下存放 updates用来存放可用的插件更新包括插件更新的地址都在该目录下的default.json存储 nodes:保存节点的配置 secrets存放一些秘钥 userContent网上说是存放为Jenkins服务器定制化的一些内容这个小编也不清楚具体存放的啥这个目录默认是空的只有一个readme文件 users存放用户账号信息 war貌似是jenkinswar解压之后的文件 workspace存放Jenkins配置的job中相关的文件和中间产物 根目录下的jenkins.xml文件里面存储了jenkins的启动命令以及对应的端口其实底层都是通过java -jar xxx.war的形式去启动后续要更改端口直接修改这个文件中的httpPort的值然后重启服务即可
20. 简述Jenkins怎么备份以及对应的配置选项
Jenkins 有一个备份插件它可以用来与Jenkins备份重要的配置设置。按照下面给出有一个适当的备份所需的步骤。 1、 管理员登陆172.20.15.36:8080点击“系统管理”然后选择“插件管理”选项 2、在可用Available选项卡上搜索并勾选“ThinBackup”。点击“Install without Restart”。完成后重新启动Jenkins实例 3、进入系统管理-ThinBackup→Settings下进行相关参数配置配置说明如下 备份目录 指定备份目录。Jenkins进程需要对此目录的写访问权。您可以使用$ { JENKINS_WORKSPACE } 等环境变量来指定路径。 完整备份的备份计划 指定触发完整备份的计划。使用Cron表示法。即使没有更改完整备份也会备份所有文件。 差异备份的备份计划 指定触发差异备份的计划。使用Cron表示法。差异备份仅存储自上次完全备份以来修改的数据。如果未检测到任何更改则不会创建差异备份。 注意如果只需要完整备份则无需指定差异备份计划。由于差异备份依赖于完整备份因此如果指定差异备份计划则必须提供完整备份计划。 等到Jenkins / Hudson闲置以执行备份 建议启用此选项默认。然而许多用户报告说安静模式阻止了长时间运行的作业的执行。如果禁用此选项则无需等待实例的安全状态即可进行备份。换句话说备份将立即完成这可能导致损坏的备份。 在指定的分钟后强制Jenkins进入完全模式 在指定的时间分钟后强制安静模式以强制安全的备份环境。零表示在调度程序触发备份时直接强制执行完全模式。阅读下面有关备份过程的更多信息。 最大备份集数 要节省磁盘空间可以指定存储的最大备份集数。备份集定义为完整备份及其引用差异备份。在下一次完整备份操作后将删除较旧的备份集。这也适用于压缩备份集。 备份中排除的文件 如果您有特定文件而不想备份则在此处输入标识这些文件的正则表达式将阻止它们被备份。名称与此正则表达式匹配的所有文件都不会被备份。如果不需要请留空。如果表达式无效则将忽略该表达式。 备份构建结果 如果启用此选项则还将备份构建结果。这可能是很多数据所以要仔细考虑它。一旦您决定备份构建结果您还可以选择备份构建存档。再次注意这个选项因为它可能非常耗时并且可能需要大量的磁盘空间 备份’userContents’ Jenkins提供了一个URL您可以在其中放置常用数据例如静态HTML工具…。如果选中此选项则可以备份所有这些数据。 备份仅构建标记为保留 如果启用此选项则仅备份标记为“永久保留此构建”的构建的结果/工件。 清理差异备份 如果启用此选项则只要完成新的完整备份就会删除所有差异备份。 将旧备份移动到ZIP文件 如果选中此选项则每当执行新的完整备份时所有旧备份集都将移动到ZIP文件。每个ZIP文件将包含一个备份集即一个完整备份和引用它的任何差异备份。文件名将标识包含备份的时间范围即完整备份的时间戳和最新差异备份的时间戳。 注意 “ 最大备份集数”设置也适用于由thinBackup创建的备份ZIP文件。 注意如果选中“ 清理差异备份 ”则在完成压缩之前将执行diff清理因此ZIP文件中不会进行差异备份。 以上配置表示每天凌晨12点自动完整备份到设置的目录/Trendy/jenkins_backup下 备份内容包括:Backup next build number file、Backup ‘userContent’folder、 Backup plugins archives、 Clean up differential backups; 此外可以手工执行备份
21. 简述配置gitlab提交代码Jenkins自动构建
1、jenkins配置 1.1 安装Gitlab Hook Plugin插件 系统管理-管理插件-可选插件-Gitlab Hook Plugin和Build Authorization Token Root Plugin 1.2 生成随机token #openssl rand -hex 12 0f2a47c861133916d2e299e3 1.3 创建项目触发器 项目-配置-构建触发器 http://192.168.3.199:8080/jenkins/project/web-demo 2、配置gitlab 2.1 在Git项目配置界面设置链接和token 登录gitlab,在这个项目下找到钩子配置的地方 选择项目-设置-webhooks 插件使用介绍https://wiki.jenkins-ci.org/display/JENKINS/BuildTokenRootPlugin http://192.168.3.199:8080/jenkins/buildByToken/build?jobweb-demotoken0f2a47c861133916d2e299e3 http://jenkins服务器地址:8080/buildByToken/build?job项目名tokentoken值 2.2 测试
22. Jenkins 使用什么语法来计划构建作业或 SVN 轮询
Cron语法使用五个星号表示每个星号之间用空格隔开。 语法如下 [分钟] [小时] [每月的某天] [月份] [一周的某天]。 例如如果想为每个星期一的11.59 pm设置cron则为 59 11 * * 1
23. 简述什么是DSL Jenkins
Jenkins的“作业DSL /插件”由两部分组成-第一部分域特定语言DSL本身它允许用户使用基于Groovy的语言来描述工作其次是一个Jenkins插件用于管理脚本和结果是更新并创建并维护了Jenkins工作
24. 如何在Jenkins中定义Post
post 步骤在Jenkins pipeline语法中是可选的包含的是整个pipeline或阶段完成后一些附加的步骤。 比如我们希望整个pipeline执行完成之后或pipeline的某个stage执行成功后发生一封邮件就可以使用post可以理解为”钩子“。
根据pipeline或阶段的完成状态post部分分成多种条件块包括 • always不论当前完成状态是什么都执行。 • changed只要当前完成状态与上一次完成状态不同就执行。 • fixed上一次完成状态为失败或不稳定unstable当前完成状态为成功时执行。 • regression上一次完成状态为成功当前完成状态为失败、不稳定或中止aborted时执行。 • aborted当前执行结果是中止状态时一般为人为中止执行。 • failure当前完成状态为失败时执行。 • success当前完成状态为成功时执行。 • unstable当前完成状态为不稳定时执行。 • cleanup清理条件块。不论当前完成状态是什么在其他所有条件块执行完成后都执行。post部分可以同时包含多种条件块。
25. 解释如何部署Jenkins核心插件的自定义版本
以下是部署自定义构建核心插件的步骤 停止Jenkins。 将自定义HPI复制到 $ Jenkins_Home / plugins。 删除以前扩展的插件目录。 制作一个名为 .hpi.pinned的空文件 。 启动Jenkins。
26. 解释Jenkins术语AgentPost-sectionJenkinsfile
Agent指示Jenkins以特定方式和顺序执行管道的指令。 Post-section如果我们必须在管道的末尾添加一些通知并执行其他任务则Post-section肯定会在每个管道的执行结束时运行。 Jenkinsfile定义了管道的所有定义的文本文件称为Jenkinsfile。正在源代码控制存储库中检查它
27. 简述什么是 Groovy?
Groovy是一种来自 Apache 的 Java 语言。 Jenkins 使用它来编写本机脚本。基于 Groovy 的插件使 Jenkins 更具动态性,并提供一致且动态的构建报告
28. Jenkins 支持哪些 SCM 工具?
Jenkins 支持以下 SCM 工具:SVN、Clearcase、CVS、Git、AccuRev、Perforce、RTC、Mercurial。
29. 简述管道的概念以及Jenkins 为什么使用pipeline
Jenkins管道的定义被写入到一个jenkinsfile的文本文件该文件又可以被提交到项目的源代码控制库。这是“Pipeline-as-code”的基础。将CD管道作为应用程序的一部分进行版本控制并像任何其他代码一样进行审查。
Jenkins从根本上说是一个支持多种自动化模式的自动化引擎。Pipeline在Jenkins上增加了一套强大的自动化工具支持从简单的持续集成到全面的CD管道的用例。通过对一系列相关任务建模用户可以利用Pipeline的更多功能如
可维护管道是在代码中实现的并且通常会被签入源代码管理从而使团队能够编辑审阅和迭代他们的交付管道。 可能出现在继续进行管道运行之前管道可以选择停止并等待人员输入或批准。 复杂场景管道支持复杂的实际CD需求包括分叉/连接循环和并行执行工作的能力。 可扩展性Pipeline插件支持对其DSL的定制扩展 。
30. Jenkins支持什么类型的管道Pipeline
Scripted Pipeline 声明式Declarative Pipeline 其中关键语法异同如下 pipeline 是声明性管道特定语法它定义了一个包含执行整个管道的所有内容和指令的“块”。 agent 是声明式管道特定的语法它指示Jenkins为整个管道分配执行程序在节点上和工作空间。 stage是描述此Pipeline阶段的语法块 。stage在Pipeline语法页面上阅读关于声明式管道语法块的更多信息。如所提到的上述stage块在脚本管道语法可选的。 steps是声明式管道特定语法用于描述要在此中运行的步骤stage。 sh是一个Pipeline 步骤由 PipelineNodes和Processes插件提供执行给定的shell命令。 node是脚本化的管道特定语法指示Jenkins在任何可用的代理/节点上执行此管道以及其中包含的任何阶段。这与agent声明式管道特定语法中的效果相同。
31. 简述什么是Blue Ocean
Blue Ocean是pipeline的可视化UI。同时他兼容经典的自由模式的job。Jenkins Pipeline从头开始设计但仍与自由式作业兼容Blue Ocean减少了经典模式下的混乱并为团队中的每个成员增加了清晰度。Blue Ocean的主要特点包括
连续交付CD管道的复杂可视化可以让您快速直观地理解管道状态。 管道编辑器 - 通过引导用户通过直观和可视化的过程来创建管道从而使管道的创建变得平易近人。 个性化以适应团队中每个成员的基于角色的需求。 在需要干预和/或出现问题时确定精确度。Blue Ocean显示的标注了关键步骤促进异常处理和提高生产力
32. 解释 Jenkins 和 Bamboo 之间的区别?
詹金斯Jenkins是一个由世界各地的开发人员支持的辅助开放式项目。而Bamboo是其母公司开发和维护的工业工具 Bamboo具有可比性并且使用简单但是UI并不那么漂亮。Jenkin在上这堂课时要Bamboo。Jenkins的UI可能只是一个很小的老派但是新的Blue Ocean界面是一个严重的升级。 Bamboo的开箱即用选项较少但是它与Atlassian的其余工具本机集成在一起。这使Bamboo感到额外的功能-富裕而又不具备选项本身。Jenkins是3中功能最稀疏的工具但是它通过庞大的插件方案弥补了这一不足 Jenkins包含大量的插件方案使其具有无与伦比的定制性和可扩展性。Bamboo正在缓慢地发展其生态系统但是以这种速度它很有可能会迎头赶上。 作为一个相关的开放供应项目詹金斯Jenkins包含了一个庞大而有用的贡献者社区它们为彼此提供了支持。因此詹金斯Jenkins有大量的文档但是您只能自己梳理文档以找出或解决延迟剂。相反Bamboo仍在不断增长的用户社区中从其母公司提供熟练的支持。Bamboo使用者可以注意到公司积极支持的愉快混合仍然是社区的众包支持。 许多中小型软件系统组仅在云基础架构上运行。因此一旦Atlassian停止使用Bamboo云迫使小组在内部运行它对于某些Bamboo用户来说绝对是困难的。他们用BitBucket管道代替了该服务但是有些人认为这不是理想的替代方法。Jenkins仍然在那里可以在云服务器上运行。 作为一个开放式软件系统尽管您的规模很大但Jenkins完全不愿使用。Bamboo是最昂贵的工具。它的起价仅为10美元但是对于这个价格它提供了特别有限的专业知识。对于全部专业知识您将必须为每一个远程代理以$ 880的一次性价格许可Bamboo。
33. 简述什么是Bamboo 额外扩展
Bamboo是Atlassian的CI / CD服务器。Bamboo允许开发人员自动构建集成然后准备应用程序以进行准备。Bamboo与Atlassian的替代工具如Jira项目管理和Hipchat团队沟通紧密合作。Jenkins是当今市场上最受欢迎的开放式CI / CD工具。Jenkins允许开发人员在将代码提交到提供的存储库时自动构建集成和查看当前代码。
什么是Bamboo 只要您使用Bitbucket和JIRA进行开发Bamboo就是强大的并且愿意得到您的CI答案。而且Bamboo易于使用用户将在更少的时间内添加多个任务。希望更轻松的准备功能并愿意使用简单的UI的开发人员应该尝试一下。主要根据您的需求选择最简单的方法。
Bamboo特点 简单直观的拖放式用户界面用于计划管道支持的恒定任务工作持续交付的阶段原则。扇出/扇入微不足道。 暂时禁用阶段作业或任务是微不足道的。作业将在各个阶段之间放置各个阶段和任务将被重新排序并且如果您未做好准备的话会弹出警告。 尽管不像GoCD那样精巧但也可以链接管道。但是我会承认这通常是Bamboo的最弱点之一。 一个单独的准备管理器您可以在其中简单地管理准备环境跟踪您所排放的东西以及到达何处以及从释放到腐烂提交的完整可追溯性因此还包括其中的JIRA问题。 自动检测并建立新分支。即使通过非常便宜的插件也可以使恒定的管道在分支构建中以其他方式运行。 整个构建过程中的每条管道运行都会自动管理构建工件。不必强迫在关联的外部存储库中暂存工件。 正如您所期望的与替代Atlassian产品的集成比您构想的替代组合要好得多
34. 您如何在Jenkins中定义构建的参数
构建可以采用多个输入参数来执行。例如如果您有多个测试套件但只想运行一个。您可以设置一个参数以便能够决定应运行哪个参数。要在作业中包含参数则在定义参数时需要指定相同的参数。该参数可以是任何东西例如字符串文件或自定义
35. 配置Jenkins节点Agent以与Jenkins master通信的方式有哪些
有两种方法可以启动节点代理 浏览器–如果从浏览器启动Jenkins节点代理则将下载JNLPJava Web Start文件。该文件在客户端计算机上启动新进程以运行作业。 命令行–要使用命令行启动节点代理客户端需要可执行的agent.jar文件。运行此文件时它仅在客户端上启动一个进程以与Jenkins主服务器通信以运行构建作业
36. Jenkins如何验证用户身份
有3种方法 默认方式是将用户数据和凭据存储在内部数据库中。 将Jenkins配置为使用由部署它的应用程序服务器定义的身份验证机制。 配置Jenkins以针对LDAP服务器进行身份验证
37. Jenkins环境变量在批处理、shell中引用及命令编写
一、在批处理、shell中引用 shell中引用 1、 直接使用 标志如 标志如 标志如BUILD_STATUS 2、 使用$ { } 标志如$ { BUILD_STATUS } 批处理中引用 % BUILD_STATUS % 二、命令编写 cd $ { Html_Report } /; rm -f html_report.zip; zip -r html_report.zip . /* echo off set work_pathE:\Jenkins\ws\target\surefire-reports\html E: cd %work_path% if exist html_report.rar (del /q /s html_report.rar) WinRAR.exe a -idq -inul ./html_report.rar .
38. 如何使用Jenkins实现持续集成
所有开发人员都将其源代码更改提交到共享的Git存储库。 Jenkins服务器按指定的时间间隔检查共享的Git存储库然后将检测到的更改纳入构建。 构建结果和测试结果共享给各个开发人员 生成的应用程序显示在Selenium等测试服务器上并运行自动化测试。 干净且经过测试的内部版本已部署到生产服务器。
39. 简述Jenkins多分支管道如何工作
假设我希望Jenkins管道在以下条件下构建和部署应用程序。
开发人员通过向功能分支提交代码来从功能分支开始。 每当开发人员从功能分支提PR来开发分支时Jenkins管道都应触发以运行单元测试和静态代码分析。 在功能分支中成功测试代码后开发人员将PR合并到开发分支。 当代码准备发布时开发人员将PR从develop分支提到master。它应该触发一个构建管道该管道将运行单元测试用例代码分析并将其部署到dev / QA环境。 从以上条件可以看出没有手动触发Jenkins作业的情况并且每当有分支请求请求时都需要自动触发管道并为该分支运行所需的步骤。此工作流程为工程师建立了一个很好的反馈循环并避免了依赖DevOps团队在非产品环境中进行构建和部署。开发人员可以在Github上检查构建状态然后决定下一步要做的事情。
通过Jenkins多分支管道可以轻松实现此工作流程。下图显示了以上示例构建过程的多分支管道工作流的外观
这是多分支管道的工作方式。 当开发人员从功能分支创建PR来开发分支时Github将带有PR信息的Webhook发送给Jenkins。 Jenkins收到PR并找到相关的多分支管道并自动创建分支管道。然后它按照功能分支中Jenkinsfile中提到的步骤运行作业。签出期间PR中的源分支和目标分支将合并。PR合并将在Github上被阻止直到从Jenkins返回构建状态为止。 构建完成后Jenkins会将状态更新为Github PR。现在您将能够合并代码。另外如果您想查看Jenkins构建日志则可以在PR状态下找到Jenkins构建日志链接。
40. 简述如何在Jenkins中创建多分支管道
为了使多分支管道正常工作您需要在SCM存储库中包含Jenkinsfile。 如果您正在学习/测试则可以使用下面提供的多分支管道Jenkinsfile。它具有一个检出阶段和其他阶段它们会回显消息。 另外您可以克隆并使用具有此Jenkinsfile的Github存储库 注意将代理标签“ master”替换为您的Jenkins代理名称。master也可以工作但不建议它在实际的项目环境中运行。 pipeline { agent { node { label ‘master’ } } options { buildDiscarder logRotator( daysToKeepStr: ‘16’, numToKeepStr: ‘10’ ) } stages { stage(‘Cleanup Workspace’) { steps { cleanWs() sh “” echo “Cleaned Up Workspace For Project” “” } } stage(‘Code Checkout’) { steps { checkout([ $class: ‘GitSCM’, branches: [[name: ‘*/main’]], userRemoteConfigs: [[url: ‘https://github.com/spring-projects/spring-petclinic.git’]] ]) } } stage(’ Unit Testing’) { steps { sh “” echo “Running Unit Tests” “” } } stage(‘Code Analysis’) { steps { sh “” echo “Running Code Analysis” “” } } stage(‘Build Deploy Code’) { when { branch ‘develop’ } steps { sh “” echo “Building Artifact” “” sh “” echo “Deploying Code” “” } } } } 设置Jenkins多分支管道 在这里我将逐步引导您逐步在Jenkins上建立多分支管道。该设置将基于Github和最新的Jenkins 2.x版本。您还可以将Bitbucket或Gitlab用作多分支管道的SCM源。 步骤1在Jenkins主页上创建一个“新项目”。 步骤2从选项中选择“多分支管道”然后单击“确定”。 步骤3点击“添加来源”然后选择Github。 步骤4在认证字段下选择Jenkins并使用您的Github用户名和密码创建一个认证。 步骤5选择创建的凭据然后提供您的Github存储库以验证凭据如下所示。 如果您正在测试多分支管道则可以克隆演示Github存储库并使用它。https://github.com/devopscube/multibranch-pipeline-demo。 第6步选择所需的选项以符合您的要求。您可以选择发现存储库中的所有分支也可以仅选择具有“拉取请求”的分支。 管道还可以从分叉的仓库中发现具有PR的分支。 选择这些选项取决于所需的工作流程。 您可以从“添加”按钮中选择其他行为。 例如如果选择不从存储库中发现所有分支则可以选择正则表达式或通配符方法从存储库中发现分支如下所示。 这是一个正则表达式和通配符示例。 步骤7如果选择为Jenkinsfile使用其他名称则可以通过在构建配置中指定名称来实现。在“脚本路径”选项中您可以提供所需的名称。确保仓库中的Jenkinsfile与您在管道配置中提供的名称相同。 另外启用“放弃旧版本”以仅保留所需的生成日志如下所示。 步骤8保存所有作业配置。Jenkins扫描已配置的Github存储库以查找所有提升了PR的分支。 下图显示了扫描三个分支的作业并且由于我没有提出任何拉取请求Jenkins不会创建任何基于分支的管道。我将展示如何在设置Webhook之后测试自动管道创建。 到目前为止我们已经在Jenkins完成了配置可以根据PR请求扫描分支。为了拥有完整的工作流程我们需要在Github中配置一个Webhook以将所有事件提交PR等发送给Jenkins因为可以自动触发管道。
41. 解释为什么 Jenkins 与 Selenium 一起使用?
Jenkins 可以在软件或环境发生变化时运行 Selenium 测试。 Selenium 测试套件与 Jenkins 的集成允许测试作为构建过程的一部分自动运行
42. 解释什么是Jenkins触发器?举例说明在检测到新提交时如何轮询存储库
构建触发器指的是在什么条件下或者是什么时候去触发项目的构建在前面我们都是手动点击Build Now去构架项目。而事实上Jenkins内置了4种构建触发器可以让我们自动或者说半自动的去触发项目的构建4种构建触发器分别是
1 触发远程构建 2 其它工程构建后触发 3 定时构建 4 轮询SCM 轮询SCM是指扫描代码仓库的代码是否有变更如果有变更就触发项目构建。 需要注意的是设置该构建触发器Jenkins会定时扫描整个项目的代码增加系统的开销不建议使用
43. Jenkins 节点代理与 Jenkins master 通信有哪些配置方式?
Node agent 可以通过两种方式启动: Browser – 当从浏览器启动 Jenkins 节点代理时,会下载一个 JNLP(Java Web Start)文件。在客户端计算机上,此文件启动一个新进程来运行作业。 命令行 – 为了让客户端运行节点代理,它们需要一个名为 agent.jar 的可执行文件。运行此文件会在客户端上启动一个进程以连接到 Jenkins 主服务器并运行构建作业
44. 简述Jenkins 设置Nginx代理
Jenkins在本地运行在端口8080上。我们可以从端口80- 8080建立代理因此可以通过以下方式访问Jenkins http://.com 而不是默认值 http://.com:8080 首先安装Nginx。 sudo aptitude -y install nginx 删除Nginx的默认设置 cd /etc/nginx/sites-available sudo rm default …/sites-enabled/default 创建新的配置文件 sudo touch jenkins 将以下代码复制到新创建的jenkins文件中。 upstream app_server { server 127.0.0.1:8080 fail_timeout0; } server { listen 80; listen [::]:80 default ipv6onlyon; server_name ; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://app_server; break; } } } 在可用站点和启用站点之间创建符号链接 sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/ 重新启动Nginx代理服务 sudo service nginx restart 现在可以从80端口访问Jenkins。
45. 解释什么是管道即代码 Pipeline-as-code ?
Pipeline-as-code 是一种方法或一组功能,可用于在 Jenkins 源存储库中维护 CI/CD 工作流逻辑,而无需单独配置 Jenkins 分支。以下适用于在其根文件夹中具有名为 Jenkinsfile 的文件(包含管道脚本)的项目。管道语法有两种类型:声明式和语法。 1 声明性: 它提供了一种创建管道的简单方法,并具有用于创建 Jenkins 管道的预定义层次结构。可以控制管道的各个方面。 2 脚本化: 它通过轻量级执行器在 Jenkins master 上运行,该执行器使用很少的资源将管道转换为代码(命令)。
46. 简述如何实现Jenkinssonar构建代码扫描
1认识sonar。 Sonar是一个用于代码质量管理的开源平台用于管理源代码的质量可以从七个维度检测代码质量通过插件形式可以支持包括java,C#,C/C,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。 通过插件机制Sonar 可以集成不同的测试工具代码分析工具以及持续集成工具。与持续集成工具例如 Hudson/Jenkins 等不同Sonar 并不是简单地把不同的代码检查工具结果例如 FindBugsPMD 等直接显示在 Web 页面上而是通过不同的插件对这些结果进行再加工处理通过量化的方式度量代码质量的变化从而可以方便地对不同规模和种类的工程进行代码质量管理。 在对其他工具的支持方面Sonar 不仅提供了对 IDE 的支持可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果同时 Sonar 还对大量的持续集成工具提供了接口支持可以很方便地在持续集成中使用 Sonar。
2部署前准备。 主程序包https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.5.zip cli程序包https://github.com/SonarSource/sonar-scanner-cli/archive/3.0.3.778.zip 中文语言包https://github.com/SonarQubeCommunity/sonar-l10n-zh/archive/sonar-l10n-zh-plugin-1.19.zip 下载完成之后将如上包传入服务器中。
#3正式部署。 #1依赖。 整个环境依赖jdk环境官方建议使用OpenJDK 8也要准备好maven工具在系统中这两个的准备工作就不详细展示了。 对于主机配置的要求官方建议是实例需要至少2GB的RAM才能有效运行并且1GB的可用RAM用于操作系统。磁盘方面如果代码量足够大那么应该给予足够大150G的磁盘并且是出色读写性能的硬盘。 本次部署也是在Jenkins主机上直接进行的部署操作 #2创建数据库。 关于数据库如果选择MySQL那么官方建议的是5.6和5.7这两个版本这里我使用5.6版本的。 通过 curl 192.168.10.10/a | sh进行安装安装完成之后创建如下数据库 mysql CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql CREATE USER ‘sonar’ IDENTIFIED BY ‘sonar’; mysql GRANT ALL ON sonar.* TO ‘sonar’‘%’ IDENTIFIED BY ‘sonar’; mysql GRANT ALL ON sonar.* TO ‘sonar’‘localhost’ IDENTIFIED BY ‘sonar’; mysql FLUSH PRIVILEGES; #3使用普通用户。 这里使用普通用户来管理sonar因为后边如果使用root启动会报错这个还真别不听如果不信可以自己测试一下主要是到时候的elasticsearch组件会因为root启动而报错can not run elasticsearch as root所以还是乖乖的使用普通用户来部署吧。 [rootlocalhost ~] u s e r a d d s o n a r [ r o o t l o c a l h o s t ] useradd sonar [rootlocalhost ~] useraddsonar[rootlocalhost ]passwd sonar 给刚刚创建的普通用户以sudo权限。 [rootlocalhost opt] v i m / e t c / s u d o e r s 在第 93 行添加如下内容 s o n a r A L L ( A L L ) A L L 顺便在这个当口将程序的文件打开数放开一下 [ r o o t j e n k i n s ] vim /etc/sudoers 在第93行添加如下内容 sonar ALL(ALL) ALL 顺便在这个当口将程序的文件打开数放开一下 [rootjenkins ~] vim/etc/sudoers在第93行添加如下内容sonarALL(ALL)ALL顺便在这个当口将程序的文件打开数放开一下[rootjenkins ]vim /etc/security/limits.conf 在最末尾添加 sonarqube - nofile 65536 sonarqube - nproc 2048
#4SonarQube安装。 以下操作将在刚刚创建的普通用户sonar下进行。 1先将刚刚的文件传输到服务器。 [sonarjenkins ~] l s s o n a r − l 10 n − z h − s o n a r − l 10 n − z h − p l u g i n − 1.19. z i p s o n a r q u b e − 6.7.5. z i p s o n a r − s c a n n e r − c l i − 3.0.3.778. z i p 2 解压部署 s o n a r q u b e 。 [ s o n a r j e n k i n s ] ls sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip sonarqube-6.7.5.zip sonar-scanner-cli-3.0.3.778.zip 2解压部署sonarqube。 [sonarjenkins ~] lssonar−l10n−zh−sonar−l10n−zh−plugin−1.19.zipsonarqube−6.7.5.zipsonar−scanner−cli−3.0.3.778.zip2解压部署sonarqube。[sonarjenkins ]unzip sonarqube-6.7.5.zip [sonarjenkins ~] m v s o n a r q u b e − 6.7.5 s o n a r q u b e [ s o n a r j e n k i n s ] mv sonarqube-6.7.5 sonarqube [sonarjenkins ~] mvsonarqube−6.7.5sonarqube[sonarjenkins ]ll sonarqube total 12 drwxr-xr-x 8 sonar sonar 136 Aug 6 10:29 bin drwxr-xr-x 2 sonar sonar 50 Aug 6 10:20 conf -rw-r–r-- 1 sonar sonar 7651 Aug 6 10:20 COPYING drwxr-xr-x 2 sonar sonar 24 Aug 6 10:20 data drwxr-xr-x 7 sonar sonar 150 Aug 6 10:29 elasticsearch drwxr-xr-x 4 sonar sonar 40 Aug 6 10:20 extensions drwxr-xr-x 9 sonar sonar 140 Aug 6 10:29 lib drwxr-xr-x 2 sonar sonar 6 Aug 6 10:20 logs drwxr-xr-x 2 sonar sonar 24 Aug 6 10:20 temp drwxr-xr-x 9 sonar sonar 4096 Aug 6 10:29 web 3将mysql启动包导入。 包名称mysql-connector-java-5.1.40.jar此包在maven.aliyun.com (opens new window)里边搜索一下即可找到上边的完整包里边已经包含。 下载之后传到服务器放在对应目录下 [sonarjenkins ~] m k d i r s o n a r q u b e / e x t e n s i o n s / j d b c − d r i v e r / m y s q l [ s o n a r j e n k i n s ] mkdir sonarqube/extensions/jdbc-driver/mysql [sonarjenkins ~] mkdirsonarqube/extensions/jdbc−driver/mysql[sonarjenkins ]mv mysql-connector-java-5.1.40.jar sonarqube/extensions/jdbc-driver/mysql/ 注意其中的路径不要放错位置了。 4配置sonarqube。 sonar的配置文件在/home/sonar/sonarqube/conf/sonar.properties。 [sonarjenkins ~]$vim /home/sonar/sonarqube/conf/sonar.properties 配置如下三条 sonar.jdbc.usernamesonar sonar.jdbc.passwordsonar sonar.jdbc.urljdbc:mysql://localhost:3306/sonar?useUnicodetruecharacterEncodingutf8rewriteBatchedStatementstrueuseConfigsmaxPerformanceuseSSLfalse 当然如果数据库不在本机那么localhost可以更改为对应主机ip。 下面是可以配置的一些其他参数 #sonar.jdbc.maxActive60 #sonar.jdbc.maxIdle5 #sonar.jdbc.minIdle2 #sonar.jdbc.maxWait5000 #sonar.jdbc.minEvictableIdleTimeMillis600000 #sonar.jdbc.timeBetweenEvictionRunsMillis30000 保存出来。
#5sonar-scanner安装。 1解压之后配置。 [sonarjenkins ~] u n z i p s o n a r − s c a n n e r − c l i − 3.0.3.778. z i p [ s o n a r j e n k i n s ] unzip sonar-scanner-cli-3.0.3.778.zip [sonarjenkins ~] unzipsonar−scanner−cli−3.0.3.778.zip[sonarjenkins ]mv sonar-scanner-cli-3.0.3.778 sonar-scanner [sonarjenkins ~] l l s o n a r − s c a n n e r t o t a l 52 − r w − r w − r − − 1 s o n a r s o n a r 2585 M a y 122017 a p p v e y o r . p s 1 − r w − r w − r − − 1 s o n a r s o n a r 351 M a y 122017 a p p v e y o r . y m l d r w x r w x r − x 4 s o n a r s o n a r 48 M a y 122017 i t − r w − r w − r − − 1 s o n a r s o n a r 7635 M a y 122017 L I C E N S E . t x t − r w − r w − r − − 1 s o n a r s o n a r 179 M a y 122017 N O T I C E . t x t − r w − r w − r − − 1 s o n a r s o n a r 12308 M a y 122017 p o m . x m l − r w − r w − r − − 1 s o n a r s o n a r 812 M a y 122017 R E A D M E . m d − r w − r w − r − − 1 s o n a r s o n a r 264 M a y 122017 r u n i n t e g r a t i o n t e s t s . s h d r w x r w x r − x 4 s o n a r s o n a r 30 M a y 122017 s r c − r w − r w − r − − 1 s o n a r s o n a r 166 M a y 122017 t h i r d − p a r t y − l i c e n s e s . s h − r w x r − x r − x 1 s o n a r s o n a r 475 M a y 122017 t r a v i s . s h 2 编译打包。注意这个地方是要进行一些配置的但是目前这种情况是无法配置的也就是说这个 c l i 需要编译之后才能够使用那么可以通过 m a v e n 工具进行编译也可以直接在安装包里下载可用的包。如果你的 m a v e n 工具已经配置好了那么可以直接运行如下命令构建 [ s o n a r j e n k i n s s o n a r − s c a n n e r ] ll sonar-scanner total 52 -rw-rw-r-- 1 sonar sonar 2585 May 12 2017 appveyor.ps1 -rw-rw-r-- 1 sonar sonar 351 May 12 2017 appveyor.yml drwxrwxr-x 4 sonar sonar 48 May 12 2017 it -rw-rw-r-- 1 sonar sonar 7635 May 12 2017 LICENSE.txt -rw-rw-r-- 1 sonar sonar 179 May 12 2017 NOTICE.txt -rw-rw-r-- 1 sonar sonar 12308 May 12 2017 pom.xml -rw-rw-r-- 1 sonar sonar 812 May 12 2017 README.md -rw-rw-r-- 1 sonar sonar 264 May 12 2017 run_integration_tests.sh drwxrwxr-x 4 sonar sonar 30 May 12 2017 src -rw-rw-r-- 1 sonar sonar 166 May 12 2017 third-party-licenses.sh -rwxr-xr-x 1 sonar sonar 475 May 12 2017 travis.sh 2编译打包。 注意这个地方是要进行一些配置的但是目前这种情况是无法配置的也就是说这个cli需要编译之后才能够使用那么可以通过maven工具进行编译也可以直接在安装包里下载可用的包。 如果你的maven工具已经配置好了那么可以直接运行如下命令构建 [sonarjenkins sonar-scanner] llsonar−scannertotal52−rw−rw−r−−1sonarsonar2585May122017appveyor.ps1−rw−rw−r−−1sonarsonar351May122017appveyor.ymldrwxrwxr−x4sonarsonar48May122017it−rw−rw−r−−1sonarsonar7635May122017LICENSE.txt−rw−rw−r−−1sonarsonar179May122017NOTICE.txt−rw−rw−r−−1sonarsonar12308May122017pom.xml−rw−rw−r−−1sonarsonar812May122017README.md−rw−rw−r−−1sonarsonar264May122017runintegrationtests.shdrwxrwxr−x4sonarsonar30May122017src−rw−rw−r−−1sonarsonar166May122017third−party−licenses.sh−rwxr−xr−x1sonarsonar475May122017travis.sh2编译打包。注意这个地方是要进行一些配置的但是目前这种情况是无法配置的也就是说这个cli需要编译之后才能够使用那么可以通过maven工具进行编译也可以直接在安装包里下载可用的包。如果你的maven工具已经配置好了那么可以直接运行如下命令构建[sonarjenkinssonar−scanner]mvn clean install 打包之后会多出一个target目录查看里边的文件 [sonarjenkins sonar-scanner] l s t a r g e t / a r c h i v e − t m p g e n e r a t e d − s o u r c e s m a v e n − a r c h i v e r o r i g i n a l − s o n a r − s c a n n e r − c l i − 3.0.3 − S N A P S H O T . j a r s o n a r − s c a n n e r − c l i − 3.0.3 − S N A P S H O T . j a r s u r e f i r e − r e p o r t s c l a s s e s g e n e r a t e d − t e s t − s o u r c e s m a v e n − s t a t u s s o n a r − s c a n n e r − 3.0.3 − S N A P S H O T . z i p s o n a r − s c a n n e r − c l i − 3.0.3 − S N A P S H O T − s o u r c e s . j a r t e s t − c l a s s e s 而那个 s o n a r − s c a n n e r − 3.0.3 − S N A P S H O T . z i p 就是我们需要的文件了。拿出来重新操作一波。 [ s o n a r j e n k i n s s o n a r − s c a n n e r ] ls target/ archive-tmp generated-sources maven-archiver original-sonar-scanner-cli-3.0.3-SNAPSHOT.jar sonar-scanner-cli-3.0.3-SNAPSHOT.jar surefire-reports classes generated-test-sources maven-status sonar-scanner-3.0.3-SNAPSHOT.zip sonar-scanner-cli-3.0.3-SNAPSHOT-sources.jar test-classes 而那个sonar-scanner-3.0.3-SNAPSHOT.zip就是我们需要的文件了。 拿出来重新操作一波。 [sonarjenkins sonar-scanner] lstarget/archive−tmpgenerated−sourcesmaven−archiveroriginal−sonar−scanner−cli−3.0.3−SNAPSHOT.jarsonar−scanner−cli−3.0.3−SNAPSHOT.jarsurefire−reportsclassesgenerated−test−sourcesmaven−statussonar−scanner−3.0.3−SNAPSHOT.zipsonar−scanner−cli−3.0.3−SNAPSHOT−sources.jartest−classes而那个sonar−scanner−3.0.3−SNAPSHOT.zip就是我们需要的文件了。拿出来重新操作一波。[sonarjenkinssonar−scanner]mv target/sonar-scanner-3.0.3-SNAPSHOT.zip ~/ [sonarjenkins sonar-scanner] c d [ s o n a r j e n k i n s ] cd [sonarjenkins ~] cd[sonarjenkins ]unzip sonar-scanner-3.0.3-SNAPSHOT.zip [sonarjenkins ~] l s s o n a r − l 10 n − z h − s o n a r − l 10 n − z h − p l u g i n − 1.19. z i p s o n a r q u b e − 6.7.5. z i p s o n a r − s c a n n e r − 3.0.3 − S N A P S H O T s o n a r − s c a n n e r − c l i − 3.0.3.778. z i p s o n a r q u b e s o n a r − s c a n n e r s o n a r − s c a n n e r − 3.0.3 − S N A P S H O T . z i p [ s o n a r j e n k i n s ] ls sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip sonarqube-6.7.5.zip sonar-scanner-3.0.3-SNAPSHOT sonar-scanner-cli-3.0.3.778.zip sonarqube sonar-scanner sonar-scanner-3.0.3-SNAPSHOT.zip [sonarjenkins ~] lssonar−l10n−zh−sonar−l10n−zh−plugin−1.19.zipsonarqube−6.7.5.zipsonar−scanner−3.0.3−SNAPSHOTsonar−scanner−cli−3.0.3.778.zipsonarqubesonar−scannersonar−scanner−3.0.3−SNAPSHOT.zip[sonarjenkins ]rm -rf sonar-scanner [sonarjenkins ~] m v s o n a r − s c a n n e r − 3.0.3 − S N A P S H O T s o n a r − s c a n n e r 3 配置。接下来才可正式进入 c l i 的配置。 [ s o n a r j e n k i n s ] mv sonar-scanner-3.0.3-SNAPSHOT sonar-scanner 3配置。 接下来才可正式进入cli的配置。 [sonarjenkins ~] mvsonar−scanner−3.0.3−SNAPSHOTsonar−scanner3配置。接下来才可正式进入cli的配置。[sonarjenkins ]vim /home/sonar/sonar-scanner/conf/sonar-scanner.properties 将如下三句添加在文件末尾 sonar.jdbc.usernamesonar sonar.jdbc.passwordsonar sonar.jdbc.urljdbc:mysql://localhost:3306/sonar?useUnicodetruecharacterEncodingutf8rewriteBatchedStatementstrueuseConfigsmaxPerformance
#6配置环境变量。 这里切回到root用户进行添加。 [rootjenkins ~]KaTeX parse error: Expected EOF, got # at position 25: …profile 在末尾添加 #̲set sonar-quebe…PATH: S O N A R H O M E / b i n / l i n u x − x 86 − 64 : SONAR_HOME/bin/linux-x86-64: SONARHOME/bin/linux−x86−64:SONAR_RUNNER_HOME/bin 加载配置注意在加载之前请确保主机目录与我上边的是一致的否则可能出现环境被搞乱的风险。 [sonarjenkins ~]$source /etc/profile
#7运行sonarqube。 [sonarjenkins ~] c d s o n a r q u b e / b i n / l i n u x − x 86 − 64 / [ s o n a r j e n k i n s l i n u x − x 86 − 64 ] cd sonarqube/bin/linux-x86-64/ [sonarjenkins linux-x86-64] cdsonarqube/bin/linux−x86−64/[sonarjenkinslinux−x86−64]ls lib sonar.sh wrapper [sonarjenkins linux-x86-64] . / s o n a r . s h U s a g e : . / s o n a r . s h c o n s o l e ∣ s t a r t ∣ s t o p ∣ r e s t a r t ∣ s t a t u s ∣ d u m p [ s o n a r j e n k i n s l i n u x − x 86 − 64 ] ./sonar.sh Usage: ./sonar.sh { console | start | stop | restart | status | dump } [sonarjenkins linux-x86-64] ./sonar.shUsage:./sonar.shconsole∣start∣stop∣restart∣status∣dump[sonarjenkinslinux−x86−64]./sonar.sh start 关于启动脚本的各项参数已经在上边展示出来了可以尝试一下。 等待一会儿就可以访问了。 通过192.168.10.3:9000进行访问。 image 点击login用户名密码默认为admin/admin进行登入。 开始有一个教程不过先跳过 image
#8配置开机自启动。 我的主机用的是CentOS-7。 先将启动命令加入环境中。 [rootjenkins ~] l n − s / h o m e / s o n a r / s o n a r q u b e / b i n / l i n u x − x 86 − 64 / s o n a r . s h / u s r / b i n / s o n a r 验证一下 [ r o o t j e n k i n s ] ln -s /home/sonar/sonarqube/bin/linux-x86-64/sonar.sh /usr/bin/sonar 验证一下 [rootjenkins ~] ln−s/home/sonar/sonarqube/bin/linux−x86−64/sonar.sh/usr/bin/sonar验证一下[rootjenkins ]sonar status SonarQube is running (36982). 然后创建service管理方式。 [rootjenkins ~]$vim /etc/init.d/sonar 添加如下内容 #!/bin/bash #rc file for SonarQube #chkconfig: 345 96 10 #description: SonarQube system (www.sonarsource.org) ###BEGIN INIT INFO #Provides: sonar #Required-Start: $network #Required-Stop: $network #Default-Start: 3 4 5 #Default-Stop: 0 1 2 6 #Short-Description: SonarQube system (www.sonarsource.org) #Description: SonarQube system (www.sonarsource.org) ###END INIT INFO /usr/bin/sonar ∗ 简单配置 [ r o o t j e n k i n s ] * 简单配置 [rootjenkins ~] ∗简单配置[rootjenkins ]chmod 755 /etc/init.d/sonar [rootjenkins ~] c h k c o n f i g − − a d d s o n a r [ r o o t j e n k i n s ] chkconfig --add sonar [rootjenkins ~] chkconfig−−addsonar[rootjenkins ]chkconfig sonar on 测试一下 [rootjenkins ~]$service sonar status SonarQube is running (36982).
#9插件安装。 这里主要先安装一个中文语言包的插件。 插件下载地址https://github.com/SonarQubeCommunity/sonar-l10n-zh 唯一要注意的问题就是版本要与刚刚安装的相对应。 image 下载之后传入到服务器当中。 [sonarjenkins ~] u n z i p s o n a r − l 10 n − z h − s o n a r − l 10 n − z h − p l u g i n − 1.19. z i p [ s o n a r j e n k i n s ] unzip sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip [sonarjenkins ~] unzipsonar−l10n−zh−sonar−l10n−zh−plugin−1.19.zip[sonarjenkins ]ll sonar-l10n-zh-sonar-l10n-zh-plugin-1.19 total 8 drwxrwxr-x 4 sonar sonar 79 Nov 14 2017 compare -rw-rw-r-- 1 sonar sonar 3436 Nov 14 2017 pom.xml -rw-rw-r-- 1 sonar sonar 983 Nov 14 2017 README.md drwxrwxr-x 4 sonar sonar 30 Nov 14 2017 src 同样这里需要编译之后才能使用当然也可以在刚才的链接当中直接下载所需的jar包。 [sonarjenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19] m v n c l e a n i n s t a l l 同样的编译完成之后会多一个 t a r g e t 的目录。 [ s o n a r j e n k i n s s o n a r − l 10 n − z h − s o n a r − l 10 n − z h − p l u g i n − 1.19 ] mvn clean install 同样的编译完成之后会多一个target的目录。 [sonarjenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19] mvncleaninstall同样的编译完成之后会多一个target的目录。[sonarjenkinssonar−l10n−zh−sonar−l10n−zh−plugin−1.19]ll target/ total 40 drwxrwxr-x 3 sonar sonar 17 Nov 6 13:48 classes drwxrwxr-x 3 sonar sonar 25 Nov 6 13:48 generated-sources drwxrwxr-x 3 sonar sonar 30 Nov 6 13:48 generated-test-sources drwxrwxr-x 2 sonar sonar 28 Nov 6 13:48 maven-archiver drwxrwxr-x 3 sonar sonar 35 Nov 6 13:48 maven-status -rw-rw-r-- 1 sonar sonar 38340 Nov 6 13:48 sonar-l10n-zh-plugin-1.19-RC2-SNAPSHOT.jar drwxrwxr-x 2 sonar sonar 123 Nov 6 13:48 surefire-reports drwxrwxr-x 3 sonar sonar 17 Nov 6 13:48 test-classes 我们所需要的就是编译出来的jar包把jar包移动到/home/sonar/sonarqube/extensions/plugins目录下即可。 [sonarjenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19] m v t a r g e t / s o n a r − l 10 n − z h − p l u g i n − 1.19 − R C 2 − S N A P S H O T . j a r / h o m e / s o n a r / s o n a r q u b e / e x t e n s i o n s / p l u g i n s / 移动之后重启一下服务即可。 [ s o n a r j e n k i n s ] mv target/sonar-l10n-zh-plugin-1.19-RC2-SNAPSHOT.jar /home/sonar/sonarqube/extensions/plugins/ 移动之后重启一下服务即可。 [sonarjenkins ~] mvtarget/sonar−l10n−zh−plugin−1.19−RC2−SNAPSHOT.jar/home/sonar/sonarqube/extensions/plugins/移动之后重启一下服务即可。[sonarjenkins ]/home/sonar/sonarqube/bin/linux-x86-64/sonar.sh restart 重启完成之后再去浏览器刷新一下发现系统已经变成中文的了。
#4Jenkins构建。 #1添加插件。 首先在Jenkins当中下载对应的插件。 插件安装完成之后在jenkins的”系统管理”–》“系统设置” 就能看到SonarQube servers的配置点截图如下 #2添加用户。 配置之前需要先在sonar当中添加一个连接用户。 这里创建一个用户用户名为test秘钥复制下来。回到刚刚Jenkins处进行配置 注意这里的URL应当填写部署sonar的主机ip即便你是同样部署的Jenkins本机的也不要写成localhost因为在后边会用到这个配置信息。 #3添加工具。 在Jenkins的系统管理中的全局工具当中添加sonar工具。 此同时不用多说的也应将jdk的工具maven的工具配置完善。
#4创建一个测试项目。 创建一个maven风格的名称为test-sonar的项目。 过程不详细说了直接看截图。 其中的sonar片段除了定义一个名称选中刚刚添加的jdk工具重要的就是当中的那段配置了。 内容如下 #项目key (随意输入必填项) sonar.projectKeytest-sonar #项目名称和版本必填项 sonar.languagejava sonar.projectVersion1.0 sonar.sourceEncoding UTF-8 sonar.projectNametest-sonar #源码位置必填项相对于jenkins的workspace路径例如我此时的绝对路径为~/.jenkins/workspace/Test/test-webapp/src/main/java sonar.sourcessrc/main/java #编译后的class位置必填项旧版本此项可不填建议还是填入相对路径同上 sonar.java.binariestarget/classes 然后保存项目构建一次。 在构建界面中可以看到一些不一样的东东。 左侧的SonarQube点击之后可以直接跳转到这个项目对应的sonar中的结果。
#5查看结果。 来到sonar界面当中刷新一下首先映入眼帘的就是我们刚刚定义的一个test-sonar的项目展示。