zoukankan      html  css  js  c++  java
  • DevOps实践之持续集成Jenkins(最新版本测试)

    一、安装Jenkins

    (1)下载并安装配置Java Development Kit 8

    [root@localhost ~]# rpm -ivh jdk-8u161-linux-x64.rpm 
    Preparing...                ########################################### [100%]
       1:jdk1.8                 ########################################### [100%]
    Unpacking JAR files...
    	tools.jar...
    	plugin.jar...
    	javaws.jar...
    	deploy.jar...
    	rt.jar...
    	jsse.jar...
    	charsets.jar...
    	localedata.jar...
    [root@localhost ~]# vim /etc/profile
    在最后添加以下信息
    export JAVA_HOME=/usr/java/jdk1.8.0_161
    export PATH=$PATH:$JAVA_HOME/bin
    
    [root@localhost ~]# . /etc/profile
    [root@localhost ~]# java -version
    java version "1.8.0_161"
    Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
    

    (2)运行Jenkins

    下载jenkins.war
    [root@localhost ~]# java -jar jenkins.war 
    Running from: /root/jenkins.war
    webroot: $user.home/.jenkins
    Feb 28, 2018 4:07:11 PM Main deleteWinstoneTempContents
    WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war
    Feb 28, 2018 4:07:12 PM org.eclipse.jetty.util.log.Log initialized
    INFO: Logging initialized @586ms to org.eclipse.jetty.util.log.JavaUtilLog
    Feb 28, 2018 4:07:12 PM winstone.Logger logInternal
    INFO: Beginning extraction from war file
    ......
    ......
    ......
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    
    86edba508edf4d04859113d89a763f47
    
    This may also be found at: /root/.jenkins/secrets/initialAdminPassword
    
    *************************************************************
    *************************************************************
    *************************************************************
    
    Feb 28, 2018 4:07:45 PM hudson.model.UpdateSite updateData
    INFO: Obtained the latest update center data file for UpdateSource default
    Feb 28, 2018 4:07:47 PM hudson.model.DownloadService$Downloadable load
    INFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
    Feb 28, 2018 4:07:57 PM hudson.model.UpdateSite updateData
    INFO: Obtained the latest update center data file for UpdateSource default
    Feb 28, 2018 4:07:57 PM hudson.WebAppMain$3 run
    INFO: Jenkins is fully up and running
    Feb 28, 2018 4:08:01 PM hudson.model.DownloadService$Downloadable load
    INFO: Obtained the updated data file for hudson.tools.JDKInstaller
    Feb 28, 2018 4:08:01 PM hudson.model.AsyncPeriodicWork$1 run
    INFO: Finished Download metadata. 41,401 ms
    

    (3)解锁Jenkins
    用上面的那行密码解锁Jenkins后才能继续配置

    点击Continue

    (4)安装插件(安装默认插件)

    (5)配置管理员账户

    (6)准备就绪

    二、配置Jenkins

    (1)配置JDK
    点击系统管理—>全局工具管理

    如果有多个应用程序,需要不同的JDK版本,可以在这里添加多个JDK

    (2)配置Maven
    http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.2/binaries/

    [root@localhost ~]# tar -zxvf apache-maven-3.5.2-bin.tar.gz
    [root@localhost ~]# mv apache-maven-3.5.2 /usr/local/maven3
    设置环境变量,在/etc/profile中添加
    export MAVEN_HOME=/usr/local/maven3
    export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    [root@localhost ~]# source /etc/profile    
    [root@localhost ~]# mvn -v
    Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
    Maven home: /usr/local/maven3
    Java version: 1.8.0_161, vendor: Oracle Corporation
    Java home: /usr/java/jdk1.8.0_161/jre
    Default locale: en_US, platform encoding: UTF-8
    OS name: "linux", version: "2.6.32-573.el6.x86_64", arch: "amd64", family: "unix"
    

    三、创建和配置基于Maven的JEE Web应用程序

    创建一个基于Maven的Jenkins构建作业,执行pom.xml文件进行编译、单元测试并创建一个包文件。

    安装Maven项目插件:Maven Integration plugin
    在Jenkins仪表盘单击开始新任务,选择Maven项目,点击“确定”


    package目标将编译源代码,执行单元测试用例,并在Java上下文创建一个包或war文件。
    单击Apply和Save

    点击立即构建

    等待Maven的package目标在Jenkins中执行,将编译所有资源文件,执行用Junit编写的单元测试用例,并创建一个需要在Tomcat或JBoss上部署的WAR文件。
    如果构建成功,我们的目标就实现了,这就是持续集成。

    报错处理:

    解决:
    查看pom.xml的配置路径是否有误,尽量写绝对路径/root/.jenkins/workspace/PetClinic/pom.xml

    四、单元测试用例结果

    要检查单元测试的执行情况,在项目仪表盘上点击Test Result(确保构建时是成功的)

    五、主代理架构

    场景:
    一个Jenkins服务器作为主节点,另一个Jenkins服务器(包含一些特定工具)作为代理,主节点可以访问在其他服务器上的可用资源,执行特定操作。

    配置步骤如下:
    系统管理—>管理节点

    新建节点

    这里需要注意的事,从节点中默认没有Launch agent via Java Web Start选项
    解决:
    系统管理—>全局安全配置—>"TCP port for JNLP agents"配置为随机—>Agent protocols

    填写相关信息

    先在上面的页面上下载agent.jar包,然后在代理服务器上执行上面的命令

    确保执行所需的工具在主节点上已经配置,主节点可以使用这些安装组件执行作业
    在项目配置中选择如下选项

    在从节点配置中选择并添加以下内容

    六、集成Jenkins和SonarQube

    系统管理—>管理插件—>可选插件—>SonarQube插件
    系统管理—>系统设置—>Add SonarQube

    安装SonarQube
    [root@localhost ~]# mv sonarqube-7.0 /usr/local/sonarqube7
    [root@localhost ~]# vim /etc/profile
    [root@localhost ~]# source /etc/profile
    创建数据库
    CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    CREATE USER 'sonar' IDENTIFIED BY 'MY@)!*sql2018';
    GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'MY@)!*sql2018';
    GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'MY@)!*sql2018';
    FLUSH PRIVILEGES;
    修改配置文件
    [root@localhost conf]# vim sonar.properties
    sonar.jdbc.username=sonar
    sonar.jdbc.password=MY@)!*sql2018
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    sonar.web.host=0.0.0.0
    sonar.web.context=
    sonar.web.port=8010
    新版本加入了elasticsearch,需要普通用户运行,否则报错
    [root@localhost logs]# groupadd elsearch
    [root@localhost logs]# useradd elsearch -g elsearch -p elasticsearch
    [root@localhost logs]# chown -R elsearch /usr/local/sonarqube7
    [root@localhost logs]# chgrp -R elsearch /usr/local/sonarqube7     
    [root@localhost logs]# chown -R elsearch /usr/java/jdk1.8.0_161
    [root@localhost logs]# chgrp -R elsearch /usr/java/jdk1.8.0_161
    以新用户启动服务
    [elsearch@localhost logs]$ /usr/local/sonarqube7/bin/linux-x86-64/sonar.sh start
    Starting SonarQube...
    Started SonarQube.
    启动成功后在浏览器地址栏输入http://192.168.1.68:8010即可访问snoarQube.
    缺省用户名和密码是 admin/admin
    

    在SonarQube上得到身份验证令牌

    系统管理—>全局工具配置—>配置SonarQube Scanner自动安装

    安装Quality gate插件,通过配置该插件,可以在SonarQube分析失败时放弃Jenkins构建作业。
    新建一个新的自由式作业PetClinic-Code并配置SonarQube

    [root@localhost PetClinic]# ls /root/.jenkins/workspace/PetClinic/sonar-project.properties
    # Required metadata
    sonar.projectKey=java-sonar-runner-simple
    sonar.projectName=Simple Java project analyzed with the SonarQube Runner
    sonar.projectVersion=1.0
    
    # Comma-separated paths to directories with sources (required)
    sonar.sources=src
    
    # Language
    sonar.language=java
    
    # Encoding of the source files
    sonar.sourceEncoding=UTF-8
    


    点击立即构建,在SonarQube服务器仪表盘上查看代码分析。

    这就是在Jenkins中集成SonarQube的方法。

    七、电子邮件通知

    系统管理—>系统设置

    至此,Jenkins持续集成及代码分析已经部署完成。

    补充:代码分析最后报错,有待解决

  • 相关阅读:
    Redis基本数据结构总结之SET、ZSET和HASH
    C# .Net计算函数执行的时间
    千万级规模高性能、高并发的网络架构经验分享
    c#单元测试:使用Moq框架Mock对象
    spring bean的构造器参数
    Java并发编程:ThreadLocal
    redis过期策略
    JAVA线程的生命周期状态
    jdk1.8新特性之Optional
    对Java中interrupt、interrupted和isInterrupted的理解
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8484308.html
Copyright © 2011-2022 走看看