zoukankan      html  css  js  c++  java
  • 敏捷持续集成详解

    敏捷持续集成简介

    什么是持续集成?
        持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
    好处
        节省人力成本
        加快软件开发进度
        实时交付
    整体流程
        成员通过git提交代码--》持续集成引擎来去代码并使用构建工具自动构建--》发布项目
    重要组成部分
        git
        gitlab
        jenkins 持续集成引擎
        maven 构建工具
        sonarqube 代码质量管理
        junit 自动执行单元测试
        JDK
        Tomcat

        几个war--》微服务架构

    jdk及maven的安装

    版本说明
        jdk1.8(目前大部分公司内部使用的还是JDK8,大部分依赖java的工具或框架,对JDK8的支持度是最好的)
        maven3.5.3
    安装步骤
        1.将下载好的jdk跟maven上传到服务器上
        2.解压jdk到/usr/local/
             tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
        3.配置环境变量
             vim /etc/profile
             在最下面,按i进入insert模式,添加一下内容
                JAVA_HOME=/usr/local/jdk1.8.0_91
                export JAVA_HOME
                CLASSPATH=.:$JAVA_HOME/lib
                export CLASSPATH
                PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
                export PATH
             按esc进入命令行模式,再按:wq保存退出
             激活配置
                 source /etc/profile
        5.解压maven
             tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
        6.配置maven环境变量
             vim /etc/profile
             在最下面,按i进入insert模式,添加一下内容
                MAVEN_HOME=/usr/local/apache-maven-3.5.3
                export MAVEN_HOME
                PATH=$PATH:$MAVEN_HOME/bin
                export PATH
            按esc进入命令行模式,再按:wq保存退出
             激活配置
                 source /etc/profile

    nexus安装

    1.下载nexus
        https://www.sonatype.com/download-oss-sonatype
    2.上传到服务器/root/
    3.解压
        tar -zxvf nexus-3.12.1-01-unix.tar.gz -C /usr/local/
    4.修改配置文件 
        vim /usr/local/nexus-3.12.1-01/etc/nexus-default.properties
            修改对应的端口
        修改防火墙
            vim  /etc/sysconfig/iptables
            -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT

    5.浏览器打开并登陆
        http://192.168.56.102:8081/
        账号admin
        密码 admin123
        System Requirement: max file descriptors [4096] likely too low, increase to at least [65536].
    6.修改ulimit
         vim /etc/security/limits.conf
         新增
         * soft nofile 65535
        * hard nofile 65535
    7.配置开机自启动
        su - nexus -c '/usr/local/nexus-3.12.1-01/bin/nexus start'

    nexus的使用

    1.仓库类型
        proxy:代理仓库,用于代理远程仓库
        group:仓库组,通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包
        hosted:宿主仓库,内部项目、付费jar
            releases  发布内部release版本的仓库
            snapshots 发布内部snapshots版本的仓库
            third 自建第三方jar
    2.配置代理
        选择阿里云http://maven.aliyun.com/nexus/content/groups/public/

    3.本地maven配置
    	修改maven目录下的conf/setting.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <pluginGroups/>
      <proxies/>
      <servers>
        <server>
          <id>xdclass-releases</id>
          <username>admin</username>
          <password>admin123</password>
        </server>
        <server>
          <id>xdclass-snapshots</id>
          <username>admin</username>
          <password>admin123</password>
        </server>
      </servers>
      <mirrors/>
      <profiles>
        <profile>
          <id>xdclass</id>
          <activation>
            <activeByDefault>false</activeByDefault>
          </activation>
          <!-- 私有库地址-->
          <repositories>
            <repository>
              <id>xdclass</id>
              <url>http://192.168.56.101:8081/repository/maven-public/</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>true</enabled>
              </snapshots>
            </repository>
          </repositories>
          <!--插件库地址-->
          <pluginRepositories>
            <pluginRepository>
              <id>xdclass</id>
              <url>http://192.168.56.101:8081/repository/maven-public/</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>true</enabled>
              </snapshots>
            </pluginRepository>
          </pluginRepositories>
        </profile>
      </profiles>
      <activeProfiles>
        <activeProfile>xdclass</activeProfile>
      </activeProfiles>
    </settings>
     
    10.修改编辑器中maven的配置,将配置指向setting.xml
    11.修改pom
      <!--pom.xml 远程仓库的配置  id要跟本地maven的setting.xml相同 -->
      <distributionManagement>
            <repository>
                <id>xdclass-releases</id>
                <name>Ruizhi Release Repository</name>
                <url>http://192.168.56.101:8081/repository/maven-releases/</url>
            </repository>
     
            <snapshotRepository>
                <id>xdclass-snapshots</id>
                <name>Ruizhi Snapshot Repository</name>
                <url>http://192.168.56.101:8081/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>
     
    12.测试是否nexus搭建成功
    	pom添加本地没有的依赖,看nexus会不会代理
    	mvn deploy 看是否成功推送至nexus
    

      

    编译安装mysql

    linux下安装mysql的方式
        yum 安装简单
        自行编译安装 自由
    mysql下载
        http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17.tar.gz
    编译安装mysql
        1.解压
            tar -zxvf mysql-5.7.17.tar.gz
        2.安装相应的依赖
            yum install make cmake gcc gcc-c++ bison bison-devel ncurses ncurses-devel autoconf automake wget
        3.下载boost
            mkdir /usr/local/boost
            wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz --no-check-certificate
        4.添加用户并创建相应目录存放数据
            useradd mysql
            cd /home/mysql/
            mkdir data logs temp
            chown -R  mysql:mysql data logs temp
        4.执行cmake
            cmake
            -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
            -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
            -DDEFAULT_CHARSET=utf8
            -DDEFAULT_COLLATION=utf8_general_ci
            -DWITH_MYISAM_STORAGE_ENGINE=1
            -DWITH_INNOBASE_STORAGE_ENGINE=1
            -DWITH_ARCHIVE_STORAGE_ENGINE=1
            -DWITH_BLACKHOLE_STORAGE_ENGINE=1
            -DWITH_MEMORY_STORAGE_ENGINE=1
            -DWITH_READLINE=1
            -DENABLED_LOCAL_INFILE=1
            -DMYSQL_DATADIR=/home/mysql/data
            -DMYSQL_USER=mysql
            -DMYSQL_TCP_PORT=3306
            -DWITH_BOOST=/usr/local/boost
        5.编译安装
            make  进行编译
            make install 安装
        6.修改mysql安装目录权限
            chown -R mysql:mysql /usr/local/mysql
        7.初始化mysql   
        mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
        产生密码 eqK:iH;+S6dC
        8.删除/etc下的my.cnf  
            rm /etc/my.cnf
        9.复制服务启动脚本
            cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
        10.启动 MySQL 服务:
            service mysql start
        11.设置mysql服务开机自启动
            chkconfig mysql on
        12.登陆mysql并设置可远程登陆 
            mysql -u root -p 回车
            粘贴初始化时产生的临时密码 eqK:iH;+S6dC
            GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xdclass' WITH GRANT OPTION;此时不让改,提示要先设置下密码
            SET PASSWORD = PASSWORD('xdclass');
            ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
            flush privileges;
            exit;
            重新登陆,使用刚刚设置的密码
            mysql -u root -p
            登陆完成之后,即可设置允许远程登陆
            GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xdclass' WITH GRANT OPTION;
        13.开启防火墙端口
            vim /etc/sysconfig/iptables
            加入
            -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
        14.使用连接工具测试远程连接

    代码质量管理平台--sonarqube安装

    前置依赖
    	mysql 5.6 or 5.7
    	jdk 1.8
    1.下载
    	https://www.sonarqube.org/
    2.安装unzip并解压sonarqube并移动到/usr/local
    	yum install unzip
    	unzip sonarqube-6.7.4.zip
    	mv sonarqube-6.7.4 /usr/local/
    3.mysql里新增数据库
    	CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
    4.修改sonarqube相应的配置
    	vim /usr/local/sonarqube-6.7.4/conf/sonar.properties
    	sonar.jdbc.username=root
    	sonar.jdbc.password=wiggin
    	sonar.jdbc.url=改成步骤4创建的库名
    	sonar.web.context=/sonar
    	sonar.web.host=0.0.0.0
    5.新增用户,并将目录所属权赋予该用户
    	useradd sonar
    	chown -R sonar:sonar sonarqube-6.7.4/
    6.启动
    	su soanr
    	/usr/local/sonarqube-6.7.4/bin/linux-x86-64/sonar.sh start
    7.界面访问
    	http://192.168.56.101:9000/sonar
    	开启防火墙
    	vim /etc/sysconfig/iptables
    	新增9000端口
    	在界面产生令牌,并将项目代码使用以下命令进行提交由sonarqube进行分析,完成后,查看相应的分析结果
    mvn sonar:sonar 
      -Dsonar.host.url=http://192.168.56.101:9000/sonar 
      -Dsonar.login=830edadfcb2c6326b1c6e2110f43c9f74d008450
    

      

    Jenkins安装及常见问题分析定位

    1.前置条件
    	JDK、tomcat
    2.安装tomcat
    	下载地址: https://tomcat.apache.org/download-90.cgi
    	useradd tomcat --新增一个名为tomcat的用户
    	passwd tomcat --给tomcat用户设置密码
    	tar -zxvf apache-tomcat-9.0.8.tar.gz -C /usr/local/ --将tomcat解压到相应目录
    	chown -R tomcat:tomcat /usr/local/apache-tomcat-9.0.8 --将整个目录的所属权转移给tomcat用户、tomcat组
     
    3.安装Jenkins
    	下载地址: https://jenkins.io/download/
    	将Jenkins上传到tomcat的webapp目录
    	chown  tomcat:tomcat Jenkins.war 修改Jenkinswar包为tomcat用户所有
    	启动tomcat
    	--通过浏览器无法访问tomcat
    		1.看tomcat是否存活  ps aux | grep tomcat 
    		2.看端口  netstat -tlun 看到8080端口已经使用了
    		3.检查防火墙  vim /etc/sysconfig/iptables 加入8080
    		4.查看tomcat日志  --》出现异常,地址已经被使用
    		5.关闭tomcat --》 查看端口(步骤2)--》发现8080依旧存在
    		6.断定8080被其他程序占用 --》netstat -tlunp | grep 8080 -->看到被gitlab相关的程序使用了
    		7.修改tomcat端口 vim conf/server.xml ,找到8080 --》将8080改成不被占用的9999端口
    		8.防火墙开启9999端口
    		9.可以正常访问tomcat
    	浏览器打开http://192.168.56.101:9999/jenkins
    	more /home/tomcat/.jenkins/secrets/initialAdminPassword
    	将里面的内容复制粘贴
    	此时发现提示Jenkins离线
    	访问 http://192.168.56.101:9999/jenkins/pluginManager/advanced
    	拉到最底下,将https--》改成http,之后提交
    	重启tomcat
    	浏览器打开http://192.168.56.101:9999/jenkins
    	more /home/tomcat/.jenkins/secrets/initialAdminPassword
    	选择默认安装
    

      

    Jenkins插件安装及配置

    插件安装:
        系统管理--》插件管理
        1.安装Maven Integration plugin 
        2.安装SonarQube Scanner for Jenkins
        3.Publish Over SSH --发布到远程服务器
    系统配置:
        系统管理--》全局工具配置
        1.配置jdk
        2.配置maven
        3.配置sonar
        4.邮件配置
            系统管理--》系统设置--》邮件通知--》
            smtp服务器 smtp.qq.com
            用户默认邮件后缀 @qq.com
            勾选ssl
            Reply-To Address发件者邮箱
            之后测试一下配置,无误即可
        5.配置gitlab授权
            Credentials--》system--》Global credentials 
        6.配置免密登陆
            yum -y install openssh-clients
            ssh-keygen -t rsa -- 产生私钥
            配置git登陆
            将Jenkins所在机子的公钥 more ~/.ssh/id_rsa.pub 的内容拷贝到gitlab项目上

    Jenkins仪表盘简介

    1.用户  --显示Jenkins里的用户
    2.构建历史 --以时间轴的形式,显示项目的构建历史
    3.系统管理 --跟Jenkins相关的配置都在里面
        3.1 系统设置
            全局设置相关的都在里面(maven、邮件、ssh服务器等都在里面配置)
        3.2    全局安全配置
            用户权限、是否允许用户登录等配置
        3.3 configure credentials
            配置证书相关的
        3.4 全局工具配置
            JDK Git Maven 等都在里面配置
        3.5 读取配置
            放弃当前配置,而读取配置文件
        3.6 管理插件
            所有的插件都是在此处管理的,安装,升级
        3.7 系统信息
            系统相关的信息
        3.8 系统日志
            系统日志,帮助定位问题
        3.9 负载统计
        3.10 Jenkins cli
        3.11 脚本命令行
        3.12 管理节点
        3.13 关于Jenkins
        3.14 manage old data
        3.15 管理用户
            Jenkins用户的管理
    4.我的视图  --我们配置的要构建的项目
    5.Credentials --证书相关,授权相关

    实战

    nohup 的用途就是让提交的命令忽略 hangup 信号,那什么叫做hangup信号?这里给出了答案
    0:标准输入 1:标准输出,2:标准错误
     
    --本地手动构建
    1.新建job并配置
    	General --可不配
    	源码管理 --按项目所使用的源码管理选择,课程使用git
    		填写项目地址,Credentials选择配置好的认证
    		选择分支  可以是项目中的任意分支
    	构建触发器
    		触发远程构建 (例如,使用脚本)
    		其他工程构建后触发 -- 在Jenkins中其他项目构建之后,触发本项目构建,一般用于项目间有依赖关系,一方修改,另一方需实时感知
    		定时构建 --定时进行构建,无论是否有变更 (类似cron表达式)
    		GitHub hook trigger for GITScm polling --github的hook触发构建,一般不使用
    		轮询 SCM --设置定时检查源码变更,有更新就构建(类似cron表达式)
     
    		定时表达式含义
    			* * * * * --五个字段
    			分 时 天 月 周
    	构建环境
    		Delete workspace before build starts:在构建之前清空工作空间
    		Abort the build if it's stuck:如果构建出现问题则终止构建
    		Add timestamps to the Console Output:给控制台输出增加时间戳
    		Use secret text(s) or file(s):使用加密文件或者文本
    	执行shell
    	#!/bin/bash
    	mv target/*.jar /root/demo/
    	cd /root/demo
    	BUILD_ID= 
    	java -jar springboot-demo.jar >log 2>&1 &
    --本地gitlab触发构建
    2.配置gitlab webhook
    	系统管理员登陆
    		http://192.168.56.101:8888/admin/application_settings
    	settings
    		Outbound requests
    		勾选Allow requests to the local network from hooks and services
    5.sonarqube整合
    		#required metadata
    		#projectKey项目的唯一标识,不能重复
    		sonar.projectKey=xdclass
    		sonar.projectName=xdclass
    		sonar.projectVersion=1.0 
    		sonar.sourceEncoding=UTF-8
    		sonar.modules=java-module
    		# Java module
    		java-module.sonar.projectName=test
    		java-module.sonar.language=java
    		# .表示projectBaseDir指定的目录
    		java-module.sonar.sources=src
    		java-module.sonar.projectBaseDir=.
    		java-module.sonar.java.binaries=target/
    

      

    更多学习资料可查看
    https://xdclass.net/html/sort.html

    如需针对此内容进行深入了解可查看
    Jenkins持续集成视频教程Git

  • 相关阅读:
    nuxtjs项目安装依赖报错
    汇总资源
    nuxt.js
    关于Git每次进入都需要输入用户名和密码的问题解决
    Chrome
    44.树与树算法
    43.搜索
    41.栈
    42.排序
    39.协程
  • 原文地址:https://www.cnblogs.com/xdclass/p/9644588.html
Copyright © 2011-2022 走看看