Jenkins持续集成最佳实践

rellata发布

持续集成

什么是持续集成

Continuous integration (CI)
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
为什么需要持续集成

持续集成最佳实践

  • 维护一个单一的代码库
  • 使构建自动化
  • 执行测试是构建的一部分
  • 集成日志及历史记录
  • 使用统一的依赖包管理库
  • 每天至少集成一次

持续集成的过程.

Jenkins基础配置

什么是jenkins

  • Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。
    Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。

  • Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。

  • 持续集成、自动测试、持续部署的超级引擎,支持自定义工具集、多种交付通道。

yum安装

#安装依赖
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#安装yum源
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
or
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
#安装Jenkins 
yum –y install jenkins
systemctl start jenkins 
systemctl enable jenkins

RPM安装方式

下载地址
    https://pkg.jenkins.io/redhat-stable/

RPM安装
    rpm –ivh jenkins-2.32.3-1.1.noarch.rpm
    service jenkins start
    chkconfig Jenkins on

访问Jenkins

访问Jenkins
   http://server_ip:8080

 查找admin默认密码
    cat /var/lib/jenkins/secrets/initialAdminPassword

 输入密码

这里需要注意下,系统默认测试网络是尝试连接www.google.com,所以我们要替换成www.baidu.com

文件位置: /var/lib/jenkins/updates/default.json
命令行执行
sed -i ‘s#google#baidu#g’ /var/lib/jenkins/updates/default.json
systemctl restart jenkins

插件管理

系统设置>插件管理

更新插件、下载安装、代理设置、可用插件

手工安装的方式:

下载地址
http://updates.jenkins-ci.org/

 解压备份plugin.tar.gz
      mv plugins /var/lib/jenkins/
      chown -R jenkins.jenkins plugins/
      service jenkins restart
默认插件

Folders Plugin
OWASP Markup Formatter Plugin
build timeout plugin
Credentials Binding Plugin
Timestamper
Workspace Cleanup Plugin
Ant Plugin
Gradle Plugin
Pipeline

GitHub Organization Folder Plugin
Pipeline: Stage View Plugin
Git plugin
Subversion Plug-in
SSH Slaves plugin
Matrix Authorization Strategy Plugin
PAM Authentication plugin
LDAP Plugin
Email Extension Plugin
Mailer Plugin

常用插件

SSH plugin
GitLab Plugin
Pipeline
Git plugin
Git Parameter Plug-In
Deploy Plugin
Maven Integration plugin
Role-based Authorization Strategy
Html reports
performance plugin
jmeter-maven
Cobertura
SonarQube
Blue Ocean

镜像管理


全部镜像
    http://mirrors.jenkins-ci.org/status.html
更换镜像:
插件管理--高级---升级站点: URL

http://updates.jenkins-ci.org/update-center.json
    https://mirrors.tuna.tsinghua.edu.cn/
    http://mirror.esuni.jp/jenkins/updates/update-center.json
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Jenkins配置目录

/etc/init.d/jenkins 启动文件
/etc/logrotate.d/jenkins 日志轮询
/etc/sysconfig/jenkins 配置文件
/usr/lib/jenkins 主目录
/usr/lib/jenkins/jenkins.war war包
/usr/sbin/rcjenkins 启动文件
/var/cache/jenkins 缓存目录
/var/lib/jenkins 主目录
/var/log/jenkins 日志文件

用户权限

内网可以修改配置文件/etc/sysconfig/jenkins或者修改启动文件/etc/init.d/Jenkins

将用户修改为root,可以调用root工具

106行,113行

修改启动端口85行,$JENKINS_PORT

systemctl daemon-reload
service jenkins restart

卡启动问题

Jenkins在第一次安装启动时会向官网回传信息

如果网络离线可以正常安装

当网络在线,但是https://jenkins-ci.io 无法打开时,卡住。

备份

tar zxvf jenknis.tar.gz /var/lib/jenkins/

备份策略: 一周作一次全备
平时用镜像做增量备份.

系统设置

工作目录设置
Maven项目配置
设置系统JDK ANT MAVEN
Jenkins Location
邮件通知

Configure Global Security

构建状态

  • Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。
  • 它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。
  • 分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。

发布php项目

  1. 构建自由风格项目
  2. 将jenkins和gitlab结合
创建公钥和私钥
[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|==....=* ..      |
|...o oo==.       |
|+.= . =++.o      |
|++ o   o.+ .     |
|... o   S .      |
|o.oo   o         |
| B+ . . .        |
|++++ .           |
|+Eo.             |
+----[SHA256]-----+
[[email protected] ~]# cat .ssh/id_rsa.pub
[[email protected] ~]# cat .ssh/id_rsa

gitlab中添加公钥 id_rsa.pub

在jenkins中添加私钥id_rsa

点击保存 ,选择证书,保存.

3.选择构建
拉到最底部,选择 execute shell.

写入脚本内容,如:

rsync -raz --delete --progress * [email protected]:/data/www/php-deploy

保存

4.创建环境

       创建环境
[[email protected] ~]# mkdir  -p /data/www
[[email protected] ~]# chown -R jenkins.jenkins /data/
        选择构建后的操作,让每次构建完成后都将结果发送给管理员

5.测试手动集成.
回到主页,点击右侧的按钮进行测试

部署完成

查看部署日志

查看部署结果

自动测试

该功能会使用到一个插件 gitlab plugin
配置gitlab认证

添加一个新的凭证

从gitlab的设置中将token复制过来

将复制的token粘贴到api token中,点ok


在jenkins系统配置中找到Gitlab将信息进行填写,Credentials选择刚刚创建对的即可.


打开项目,编辑项目的构建触发器

在gitlab上配置连接jenkins ,将Jenkins的Secret token 与Build URL 复制到gitlab中

svn

确保subversion plugin已经安装
在系统设置里选择SVN版本
获取程序的SVN路径
填写SVN用户权限
指定其它配置
构建周期
构建环境
Execute shell

查看构建结果

状态集 查看代码变更记录
Console Output 构建过程中的输出结果,主要用于查看构建过程
编辑编译信息 定制信息编译信息
Tag this build 对这次构建进行tag(svn),SVN必须已经建立tags目录

发布Maven项目

什么是Maven

Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。
开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。
Apache的开源项目
主要服务于JAVA平台的构建、依赖管理、项目管理。

安装Maven


Wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar zxvf apache-maven-3.3.9-bin.tar.gz
配置环境变量 vim /etc/profile
     export PATH=$PATH:/root/apache-maven-3.3.9/bin
测试
    mvn -v

1.POM

  • Project Object Model,项目对象模型。

  • 通过xml格式保存的pom.xml文件。

  • 作用类似ant的build.xml文件,功能更强大。

  • 该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等

  1. Maven命令
1. 创建Maven的普通java项目: 
  mvn archetype:create 
 -DgroupId=packageName 
  -DartifactId=projectName  
2. 创建Maven的Web项目:
    mvn archetype:create 
    -DgroupId=packageName    
    -DartifactId=webappName 
    -DarchetypeArtifactId=maven-archetype-webapp    
3. 清除后再编译   
    mvn clean install 
  1. 配置系统Maven
    系统管理> Global Tool Configuration

新增maven

取消自动安装

填写maven实际安装路径 /data/server/apache-maven-3.3.9/

  1. 新建Maven项目
    指定源码位置(git或svn)
    指定build选项
    clean install
    clean install -Dmaven.test.skip=true
    指定execute shell
    java -jar target/testweb-0.0.1-SNAPSHOT.jar
    5.配置maven
    settings.xml 是maven的主要配置文件
    位置 $home/.m2 用户
    meven安装目录/conf 全局
    6.按版本发布
安装git parameter plugin插件
任务配置中勾选<参数化构建过程>
选择 git parameter
创建变量名release
选择发布类型:
    tag 按标签发布
    branch按分支分布
    Revision 按修订发布

远程管理

三种方式
ansible
ssh plugin
shell ssh

ansible

安装ansible
配置ansible hosts
配置ansible 对其他机器的免密权限
执行ansible命令

ssh plugin

安装ssh plugin插件
系统管理>SSH remote hosts 增加主机信息
在项目中选择execute shell scripts on remote host using ssh

shell ssh

制作jenkins主机免密登录

直接在 execute shell界面执行ssh命令

或在脚本中接调用ssh语句
ssh [email protected] “ifconfig”
scp xxx [email protected]/xxx/

基于版本发布

安装 git parameter plugin

任务配置勾选 <参数化构建过程>
选择 git parameter
创建变量名 如:release
选择发布类型:
tag: 按标签
branch: 按分支发布
Revision: 按修订发布

War文件部署设置

安装好Deploy Plugin插件,然后在tomcat的conf目录配置tomcat-users.xml文件,在<tomcat-users>节点里添加如下内容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="username" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
引号里的username和password可以随便替换,用于部署时认证。

操作界面

选择Add post-build action,然后选择Deploy war/ear to a container,如下图:

部署说明

WAR/EAR files:war文件的存放位置,如:target/test.war 注意:相对路径,target前是没有/的。
Context path:访问时需要输入的内容,如ofCard访问时如下:http://192.168.x.x:8080/ofCard/如果为空,默认是war包的名字。
Container:选择你的web容器,如tomca 6.x
Manager user name:填入tomcat-users.xml配置的username内容
Manager password:填入tomcat-users.xml配置的password内容
Tomcat URL:填入http://192.168.x.x:8080/
Deploy on failure:构建失败依然部署,一般不选择


发表评论

电子邮件地址不会被公开。 必填项已用*标注