敏捷持續集成詳解

敏捷持續集成簡介

什麼是持續集成?
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通過每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現集成錯誤。
好處
節省人力成本
加快軟件開發進度
實時交付
整體流程
成員通過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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章