hudson正式更名为jenkins_hudson和jenkins
1.jenkins 插件管理 为什么是空白
2.关于hudson远程部署
3.如何设置jenkins服务器环境变量
4.如何用Jenkins/Hudson创建真正的pipeline
5.如何给jenkins用户设置权限
6.系统运维需要掌握哪些工具?
上帝借由各种途径使人变得孤独,好让我们可以走向自己。 ——赫尔曼·黑塞《德米安》
CI即为 持续集成(Continue Integration,简称CI) ,用通俗的话讲,就是 持续的整合版本库代码编译后制作应用镜像 。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、 提高代码质量、快速迭代 等,
Jenkins :基于Ja开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Bamboo : 是一个企业级商用软件,可以部署在大规模生产环境中。
CD即持续交付Continuous Delivery和持续部署Continuous Deployment,用通俗的话说,即可以持续的部署到生产环境给客户使用,这里分为两个阶段,持续交付我理解为满足上线条件的过程,但是没有上线,持续部署,即为上线应用的过程
关于 CD环境 ,我们使用以前搭建好的 K8s集群 ,K8s集群可以实现应用的 健康 检测,动态扩容,滚动更新 等优点,关于K8s集群的搭建,小伙伴可以看看我的其他文章
拉取镜像,启动并设置开机自启
配置docker加速器
GitLab 不多介绍。一个基于Git的版本控制平台,,提供了Git仓库管理、代码审查、问题跟踪、活动反馈和wiki,当然同时也提供了
切记:这里的端口要设置成80,要不push项目会提示没有报错,如果宿主机端口被占用,需要把这个端口腾出来
external_url '://192.168.26.55’
gitlab_rails[‘gitlab_ssh_host’] = '192.168.26.55’
gitlab_rails[gitlab_shell_ssh_port] = 222
修改完配置文件之后。直接启动容器
相关的git命令
下面我们要配置私有的docker镜像仓库,用到的机器为:
这里仓库我们选择 harbor ,因为有web页面,当然也可以使用 registry
首先需要设置selinux、防火墙
安装并启动docker并安装docker-compose,关于docker-compose,这里不用了解太多,一个轻量的docker编排工具
解压harbor 安装包:harbor-offline-installer-v2.0.6.tgz,导入相关镜像
修改配置文件
harbor.yml:设置IP和用户名密码
./prepare && ./install.sh
查看相关的镜像
访问测试
这里因为我们要在192.168.26.55(CI服务器)上push镜像到192.168.26.56(私仓),所有需要修改CI服务器上的Docker配置。添加仓库地址
修改后的配置文件
加载使其生效
CI机器简单测试一下
push一个镜像,可以在私仓的web页面查看
镜像jenkins拉取
这里为什么要改成 1000,是因为容器里是以 jenkins 用户的身份去读写数据,而在容器里jenkins 的 uid 是 1000,
更换国内清华大学镜像,Jenkins下载插件特别慢,更换国内的清华源的镜像地址会快不少
"://.google/" 替换为 "://.baidu/"
替换后查看
重启docker,获取登录密匙
需要修改jenkins绑定的docker的启动参数 , ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
修改镜像库启动参数后需要重启docker
后面 gitlab 要和 jenkins 进行联动,所以必须要需要对 jenkins 的安全做一些设置,依次点击 系统管理-全局安全配置-授权策略,勾选"匿名用户具有可读权限"
添加 JVM 运行参数 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 运行跨站请求访问
这里的话我们要通过jenkins上的kubectl客户端连接k8s,所以我们需要安装一个k8s的客户端kubectl,下载k8s客户端
然后拷贝kubeconfig 证书,k8s集群中查看证书位置,这里的证书是之前创建好的,小伙伴可以看看我之前的文章
命令测试没有问题
我们要部署 Nginx 来运行 hexo 博客系统, hexo 编译完后为一堆静态文件,所以我们需要创建一个 svc 和一个 deploy ,使用 SVC 提供服务,使用 deploy 提供服务能力,使用 Nginx+hexo的静态文件 构成的镜像
这里我们先用一个Nginx镜像来代替hexo博客的镜像
查看deployments和pod
访问测试没有问题,之后我们配置好jenkins上的触发器,直接替换就OK
我们通过 kubectl set 命令更新 deploy 的镜像时,获取的镜像是通过私仓获取的,所以需要在启动参数添加私仓地址
这里所有的节点都需要设置后重启docker
访问jenkins,接下来才是重点,我们要的jenkins上配置整个CICD流程,从而实现自动化
下面我们编译一下hexo,生成public的一个文件夹,然后上传gitlab
同时需要编写Dockerfile文件来创建镜像
jenkins 插件管理 为什么是空白
可以的。
1.先在jenkins --->系统管理--->插件管理里面安装权限策略role-strategy.jpi插件,再注册几个用户。2.在系统管理--->Configure Global Security里统一用户权限配置,在这里配置的权限针对所有job有作用。
3.也可以在job 配置里面单独授权给用户。在这里配置的权限针对当前job有作用。比如这图上可以看到admin和zhangxxx有权限,那么当用wangxxx登录时,这个job就不会显示,视图上就看不到。
关于hudson远程部署
jenkins
插件管理
为什么是空白
如何用Jenkins/Hudson创建真正的pipeline
这几天尝试用Jenkins/Hudson创建pipeline,发现网上的信息很少,所以写一篇跟大家分享。
在开始之前,得告诉你被我的标题给忽悠了,不是Jenkins/Hudson,只是Jenkins!如果你还在用Hudson,那么我建议你...
本文就简单说说我经验中的解决办法:
1.两个地域的网络都能直接相互访问,这是最好的情况(而这种情况适用范围是最窄的),可以直接用Jenkins的隐藏功能实现。
首先要有个job处于你build
process的最后一步,比如说,你release后,触发这个job
如何设置jenkins服务器环境变量
复制war到$TOMCAT_HOME/webs下启动的时候,设置一下hudson的环境变量exportHUDSON_HOME=/hudson_homecatalina.shstart对了,现在都用jenkins了。。。
如何用Jenkins/Hudson创建真正的pipeline
启动Jenkins
1、 安装jdk
从略,建议1.6或以上版本,配置好环境变量。
2、 安装tomcat
从略,安装完调试下tomcat是否正常。
3、 安装ant
下载zip包,解压后配置好环境变量。
4、 安装jenkins
下载war包,命名为Jenkins,拷贝到tomcat/webs目录下。
5、 安装Android SDK
下载安装,完成后配置好Android_SDK_HOME环境变量。此步骤主要用于进行android自动化测试,若不进行此项可略过。
安装完成后启动tomcat/bin/startup.bat文件(linux下是startup.sh),在浏览器输入://localhost:8080/jenkins,8080为tomcat端口,即可访问jenkins服务器。
配置Jenkins
1、 JDK配置
新增JDK,指定JDK名字和JAVA_HOME
2、 ANT配置
新增ANT,指定ANT名字和ANT_HOME
3、 Men配置
从略,本文未使用到Men,具体配置方法参考Google。
4、 Subversion
选择1.6版本SVN,勾选Update default Subversion credentials cache after successful authentication
5、 邮件通知
填写SMTP server、Default user E-mail suffix、System Admin E-mail Address、Jenkins URL、勾选Use SMTP Authentication,填写User Name、Password、Use SSL、SMTP port、Chareset(UTF-8) 、Default Content Type(默认)、Default Recipients(默认收件人),配置完成后可进行测试邮件。
6、 Jenkins URL
配置该URL,用于别人访问。
插件管理
1、 Hudson Subversion Plug-in,jenkins的svn插件。
2、 Android Emulator Plugin,android模拟器插件。
3、 JUnit Attachments Plugin,junit测试报告附件插件。
4、 Email-ext plugin,邮件扩展插件。此处说明下,默认Jenkins只会发送构建失败的邮件,我们需安装此插件才能自定义不同场景。
5、 Deploy to container Plugin远程发布插件。
自动化测试
打包源工程
Android程序
本小节讲诉如何打包一个Android工程,当前使用的是ant进行编译源码。
1、 首先构建一个自由风格的Job。
2、 添加源码路径,选择所使用的版本控制器,输入源码路径。
3、 构建触发器可根据需要选择是否定时构建。
4、 构建环境,此处Jenkins安装了Android Emulator Plugin插件,可以启动已有模拟器或添加新的模拟器,本文案例中使用真机调试。
5、 构建,卸载手机中原程序 adb –s uninstall com.XXXXXX
6、 生成bulid.xml文件,-p后面跟工程所在的本地jenkins下路径
android update project -n *** c:\被测工程Job路径\workspace
7、 Ant进行编译程序,并安装到当前手机中
ant debug install -f c:\被测工程Job路径\workspace\build.xml
8、 构建后操作,本案例中构建完成后自动启动构建下一个测试Job
Bulid other projects,选择测试工程的Job.
打包测试工程
Android程序
本小节讲诉如何构建一个Android测试工程,包括邮件发送和测试报告展示。
1、 构建步骤1-7和Android程序章节一样,从略。
2、 本文案例中测试程序是通过命令行启动运行的,所以在此处增加一个批处理运行。P.S. adb shell am instrument -w -e class com.megafon.test.MegafonTest#testDeleteContact com.megafon.test/android.test.InstrumentationTestRunner ,此处是通过批处理来单独运行一个个的测试用例。避免了Junit3的无序执行的问题。
3、 删除Workspace中原来存在的测试报告文件,一般不删除也会覆盖。
如何让测试程序生成xml格式的测试报告,其他文章会重点介绍。
4、 从手机中拷贝测试报告,最终测试是在手机上运行,所以报告也生成在手机中,使用adb pull命令把测试报告全部拷贝到workspace下制定目录。
5、 构建后操作,发布测试报告,如果报告中包含附件,此处使用到JUnit Attachments Plugin插件。
6、 邮件通知,此处使用到Email-ext plugin插件,前面的默认,直接使用我们在系统管理里面设置的默认值。
7、 点击右下角高级按钮,可选择不同场景下发送邮件。
8、 测试结果展示,在本次构建的控制台可以显示当前所有的构建日志。
9、测试报告点击Test Result可以显示所有测试记录。
如何给jenkins用户设置权限
如何用Jenkins/Hudson创建真正的pipeline
这几天尝试用Jenkins/Hudson创建pipeline,发现网上的信息很少,所以写一篇跟大家分享。
在开始之前,得告诉你被我的标题给忽悠了,不是Jenkins/Hudson,只是Jenkins!如果你还在用Hudson,那么我建议你立即切换到Jenkins。理由就不说了,看看这个投票就行。(此中,我吃尽了苦头)
接下来,就让我们一步一步用Jenkins搭建真正的pipeline吧。
第一步
第一步,我们先创建一个最简单的pipeline。所谓pipeline,顾名思义,就是一个流水线,由多个步骤(steps)组成。每走完一步,就来到下一步。用Build Pipeline Plugin就可以很方便地实现。
实现的效果如下图:
上例中,UnitTest是我们的初始任务。UnitTest结束之后,自动触发AC Test。如果通过了AC Test,团队可以有选择地部署到任意测试环境。
在配置这个插件时,最重要的就是选择Initial Job。
然后,在每一个step(job)中选择downstream step。可以是自动触发(Build Other Projects),也可以选择手动触发(Manually Execute Downstream Project)。
第二步
第一步中我们实现了一个流水线,但这个只是看上去的流水线而已。在工厂的流水线中,历经流水线上游到下游的,应该是同一个产品。但上例中显然不是,Unit Test和Acceptance Test所运行的可能是不同版本的代码。
要让几个step的代码运行在同一个版本,可以使用一个叫做Parameterized Trigger Plugin。如下图:
选择把Subversion revision传到下面的steps,则接下来的Steps都会checkout同一个版本的代码。但这个也有限制,就是这些Steps必须有相同的subversion URL配置。
另外,你应该还注意到我们还传了另一个参数:PL_BUILD_NUMBER。这个参数会另有用途。
除了希望保持相同版本,我们很可能希望重用upstream step生成的artifact。比如,在AC Test step会生成一些artifacts,这些artifacts经过测试之后,希望可以用于Deploy步骤。一方面,这会节省重新构建artifact的时间;另一方面,这些artifact是已经经过测试的,是可用的,而重新构建生成的却是未经测试的,可用与否未知。(虽然他们应该是一样的,但谁知道呢。。)我们可以使用ArtifactDepolyerPlugin实现。
系统运维需要掌握哪些工具?
安装插件后,进入系统设置页面,配置如下:
上安全域设置为Servlet容器代理,实际操作发现Jenkins专有用户数据库也是可以的。
二、配置权限
在系统管理页面点击Manage and Assign Roles进入角色管理页面:
1、管理角色(Manage Roles)
选择该项可以创建全局角色、项目角色,并可以为角色分配权限。
如上图,分别创建了admin、anonymous两个全局角色,Online Program、test两个项目角色。
项目角色与全局角色的区别就是,项目角色只能管理项目,没有管理jenkins的权限配置。
添加项目角色时,需要制定匹配项目的模式,如上图中的Pattern,官方文档介绍该选项支持正则表达式,如“Roger-.”表示所有以Roger-开头的项目,“(?i)roger-.*”表示以roger-开头的项目并且不区分大小写,如以ABC开头的项目可以配置为“ABC|ABC.*”,也可以使用“abc|bcd|efg”直接匹配多个项目。
2、创建用户
在分配角色之前需要先创建用户。
在系统管理页面,点击管理用户:
点击新建使用者可以创建新用户,如果之前有项目与scm版本管理系统(如svn、git等)连接并获取源码构建过,jenkins会从svn中读取到一些用户信息,可以在查看用户菜单中看到这些用户:
点击用户id或名称都可以修改用户信息。
3、分配角色(Assign Roles)
选择Assign Roles可以为用户分配所属角色,可以分配全局角色和项目角色。
如上图,将不同的用户分别分配给不同的角色,这样用户就可以具有角色所拥有的权限。
三、深入了解
该插件从2011年10月发布1.1.2版本后就不再维护了,因此会有一些小问题,但不影响使用,比如在分配角色后点击保存按钮时有可能会发生异常,浏览器点击后退按钮后重新提交就可以操作成功。
另外如果配置失败导致不能登录,可以通过修改配置文件恢复初始设置。
首先了解一下配置文件。
进入jenkins安装目录,用户配置信息和角色配置信息都以配置文件的形式存储。
上图中users目录存放了各个用户的配置信息,每个用户都会创建与用户名相同的文件夹,文件夹中包含config.xml文件,配置示例如下:
<?xml version='1.0' encoding='UTF-8'?>
<user>
<fullName>admin</fullName>
<properties>
<jenkins.security.ApiTokenProperty>
<apiToken>EfowsOP9H5arYxMmuFrbPjjITgu/fjtvHib5okFJ9DmPTu/088cvHxlE9RHwVv+S</apiToken>
</jenkins.security.ApiTokenProperty>
<hudson.model.MyViewsProperty>
<views>
<hudson.model.AllView>
<owner class="hudson.model.MyViewsProperty" reference="://.cnblogs/.."/>
<name>All</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
</hudson.model.MyViewsProperty>
<hudson.search.UserSearchProperty>
<insensitiveSearch>false</insensitiveSearch>
</hudson.search.UserSearchProperty>
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<passwordHash>uAEYii:02e0cd0d78abf90e42b28e7d3d4fe64776ae8fa9500e379f2598cc65e1b0fb70</passwordHash>
</hudson.security.HudsonPrivateSecurityRealm_-Details>
<hudson.tasks.Mailer_-UserProperty>
<emailAddress>gaoliang@esrichina.cn</emailAddress>
</hudson.tasks.Mailer_-UserProperty>
</properties>
</user>
系统运维管理是许多公司在维护软件系统中非常重要的工作内容。今天,我们就一起来了解一下,在运维过程中都有哪些工具是需要我们掌握和使用的。
1、对服务器安全和监控,可以推荐一些开源工具吗?监控好像也就nagios,cacti,zabbix,还有其他可以推荐的吗?安全方面如何监控?
监控工具各有侧重点,zabbix同时支持snmp和自己的agent,也支持自定义模板,在大部分场景下都是不错的选择。
另外,不要把zabbix视为只能监控服务器信息,通过自定义模板,也可以监控业务层面的指标。安全监控分为主动检测,如TenableNessus,以及IDS、IPS。
2、Linux运维中,服务器版本都用什么版本?CentOS5还是CentOS6、Ubuntu?为什么选择这个版本?有做哪些测试?
目前我们以CentOS6.X为主。不同Linux分支各有特点,比如Ubuntu新版本发布较快,如果追求内核版本升级速度的话,可以考虑。CentOS一直是我们的主要Linux发行版,主要是考虑到它的稳定性以及熟悉程度高。
3、对于使用缓存有什么推荐吗?一般就Redis,Codis。还有那些比较好用的开源软件?
对于类似session-id这样的可以非持久存储的数据,可以考虑memcached,使用一致性哈希算法分布式存储。
4、做自动化发布,除了Jenkins持续集成工具,还有那些好用的工具呢?
目前我所知道的,一般都是Hudson或者Jenkins,后者是前者分支出来的。这些工具都有丰富的插件,灵活使用这些插件是关键所在。
5、问个MySQL问题,三个版本(MySQL(官方版本)、PerconaServer、MariaDB)您建议使用哪个版本,原因是?
我们团队一般使用的是官方版本。南邵北大青鸟认为主要是考虑到支持和生态。
6、服务器日志收集和分析有什么好工具推荐吗?ELK貌似有点复杂,不太会用,有其他的推荐么?
ELK确实是目前使用比较广泛的日志收集和分析的工具。虽然有些学习成本,但还是值得去研究和尝试的。