jenkins快速構建

1、Jenkins是什麼?

​ Jenkins是一個開源的支持自動化構建、部署等任務的平臺。基本上可以說是持續集成(CI)、持續發佈(CD)不可或缺的工具。 jenkins官網

​ 持續集成是一個監視你版本控制系統改變的軟件。每當代碼改變的時候,這個工具自動的編譯和測試你的應用。如果出現了錯誤,這個工具立即通知開發者,因此開發者能夠立即修復問題。而且它還能自動地監測代碼質量和測試覆蓋率。可視化的代碼質量度量方案能夠鼓勵開發者不斷地改進他們的代碼

2、安裝

版本說明:系統: centos 7.6, jdk: 8u181, jenkins: 2.210

2.1、安裝jdk

~]# tar xf jdk-8u181-linux-x64.tar.gz -C /usr/java/
~]# cd /usr/java/
java]# ln -sv jdk1.8.0_181/ default
java]# ln -sv default/ jdk

]# cat /etc/profile.d/java.sh 
export JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$PATH

2.2、yum源

導入
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

安裝  yum -y install jenkins

2.3、rpm&docker

​ rpm安裝: 下載地址 docker: hub, 配置說明

配置文件

 ~]# rpm -ql jenkins-2.210-1.1
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins

2.3.1、配置jenkins

]# grep -v "^#" /etc/sysconfig/jenkins | grep -v "^$"
# 工作目錄
JENKINS_HOME="/usr/local/website/jenkins"
# java地址
JENKINS_JAVA_CMD="/usr/java/jdk/bin/java"
JENKINS_USER="jenkins"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
# 指定端口
JENKINS_PORT="18888"  
JENKINS_LISTEN_ADDRESS="0.0.0.0"
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_HTTP2_PORT=""
JENKINS_HTTP2_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_EXTRA_LIB_FOLDER=""
JENKINS_ARGS=""

2.3.2、啓動配置服務

]# ll -d /usr/local/website/jenkins/  # 工作目錄
drwxr-xr-x 2 jenkins jenkins 6 1月   2 11:39 /usr/local/website/jenkins/

# 啓動服務查看狀態
]# systemctl restart jenkins
]# systemctl status jenkins

#由於Jenkins不是Native Service,所以需要用chkconfig命令而不是systemctl命令
]# chkconfig jenkins on
]# chkconfig --list jenkins
jenkins         0:關 1:關 2:開 3:開 4:開 5:開 6:關

3、jenkins初始化

解鎖jenkins

JENKINS_HOME="/usr/local/website/jenkins" # 定義的目錄

]# cat /usr/local/website/jenkins/secrets/initialAdminPassword

jenkins快速構建

選擇推薦的插件

jenkins快速構建

下載等待

jenkins快速構建

實例配置、這裏是url的訪問路徑 ,nginx反代也將使用這個地址

jenkins快速構建

jenkins就緒準備

jenkins快速構建

jenkins主界面

jenkins快速構建

訪問界面

jenkins快速構建

4、配置maven

4.1、安裝及配置

  1. 下載: 下載地址

  2. 配置&添加環境變量

    local]# tar xf apache-maven-3.6.3-bin.tar.gz 
    local]# ln -sv apache-maven-3.6.3 maven
    
    local]# echo "export PATH=$PATH:/usr/local/maven/bin" > /etc/profile.d/maven.sh && source /etc/profile.d/maven.sh
    
    ]# mvn -version
    Apache Maven 3.6.3 (cecedd343002696d0abb150b32b541b8a6ba2883f)
    Maven home: /usr/local/maven
    Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_181/jre修改默認下載倉庫

4.2、下載源配置

4.2.1、maven

]# vim /usr/local/maven/conf/settings.xml  # 位置在157行
<mirrors>
    <mirror>
        <id>maven私服</id>
        <name>私服name</name>
        <url>maven私服,可以使用阿里或自定義/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

4.2.2、jenkins

jenkins快速構建

jenkins快速構建

點高級(advanced) 站點地址

jenkins快速構建

4.3、全局配置

4.3.1、配置maven

manage jenkins --> global tool configuration(全局配置) --> settings.xml 配置過下載源的文件

jenkins快速構建

4.3.2、配置jdk

就在maven配置下面

jenkins快速構建

4.3.3、配置maven

jenkins快速構建

4.4、publish over ssh

安裝插件說明

4.4.1、安裝

jenkins快速構建

4.4.2、私鑰

]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
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.

# 設置本地免密登陸
]# ssh-keygen -t rsa
]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
]# chmod 600 !$    
]# ssh localhost
# 如果還是不行查看 tailf /var/log/secure

4.4.3、配置ssh

manage jenkins --> configure system --> publish over SSH

jenkins快速構建

5、構建

5.1、構建第一個工程

jenkins快速構建

subversion構建

jenkins快速構建

提供svn用戶密碼

jenkins快速構建

清除之後重新編譯java類 clean compile install -Dmaven.test.skip=true
jenkins快速構建

構建步驟, exec command爲最後的步驟,可以定義腳本

jenkins快速構建

svn中pom.xml文件頭部,開發提供

<modelVersion>4.0.0</modelVersion>
<groupId>com.geokon</groupId>
<artifactId>name</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>gmonitor Maven Webapp</name>
<url>http://maven.apache.org</url>

# 拼起來就是  name-0.0.1-SNAPSHOT.war

5.2、構建查看

點擊項目--> build now --> 點擊構建項目進度條 --> 控制檯輸出日誌

jenkins快速構建

# 等待
[JENKINS] Archiving /usr/local/website/jenkins/workspace/first_maven/pom.xml to com.geokon/gmonitor/0.0.1-SNAPSHOT/gmonitor-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /usr/local/website/jenkins/workspace/first_maven/target/gmonitor.war to com.geokon/gmonitor/0.0.1-SNAPSHOT/gmonitor-0.0.1-SNAPSHOT.war
channel stopped
SSH: Connecting from host [docker_v6]
SSH: Connecting with configuration [docker_v6] ...
SSH: Disconnecting configuration [docker_v6] ...
SSH: Transferred 1 file(s)

# 登陸 9.62服務器就能看到對應的war包了
~ ]# ls /mnt/gmonitor
    gmonitor.war

6、docker

操作與構建一樣, docker:社區 19.03.5, jenkins: 2.210, 腳本 bash, svn

6.1、構建

jenkins快速構建

jenkins快速構建

清除之後重新編譯java類 clean compile install -Dmaven.test.skip=true

jenkins快速構建

exec timout(ms) 時間需要加長: 默認 120000 加個0

jenkins快速構建

構建之後控制檯輸出

jenkins快速構建

6.2、腳本

6.2.1、Dockerfile

]# cat Dockerfile 
FROM centos:7.6.1810

ADD jdk-8u181-linux-x64.tar.gz /data/
COPY apache-tomcat-8.5.38 /data/tomcat/

WORKDIR /data

ENV JAVA_HOME=/data/jdk1.8.0_181
ENV CATALINAME_HOME=/data/tomcat
ENV CATALINAME_VERSION=8.5.38
ENV PATH=$JAVA_HOME/bin:$CATALINAME_HOME/bin:$PATH
ENV LC_ALL=en_US.UTF-8

EXPOSE 8081

#CMD ["catalina.sh", "run"]
CMD ["run.sh"]

6.2.2、run.sh

]# cat apache-tomcat-8.5.38/bin/run.sh 
#!/bin/bash
#
#   Name: docker 容器運行
#   Version Number:1.01
#   Type: docker
#   Language:bash shell  
#   Date:2019-12-31 
#   Author:xiong

# 啓動tomcat
bash /data/tomcat/bin/startup.sh
# 長期輸出catalina.out日誌, 如果不這麼定義需要在前處理catalina.out日誌
tail -f /data/tomcat/logs/catalina.out

6.2.3、jenkins腳本

]# cat /mnt/jenkins_docker.sh 
#!/bin/bash
# 
#   Name:jenkins scripts
#   Version Number:1.01
#   Type:服務啓動腳本 
#   Language:bash shell  
#   Date:2020.01.03
#   Author:xiong
#
# jenkins 傳遞參數說明*****: bash script 項目名稱 端口號
# svn中的pom.xml文件名稱必須與jenkins項目名稱對應,以及與docker名稱必須對應
# ps: 一個容器對應一個端口,強制性必須唯一

P_NAME=$1     # 接受參數  項目名稱
P_PORT=$2     # 項目端口

WEBSITE=/usr/local/website
R_PRO_NAME=${WEBSITE}/${P_NAME}                   # 相對程序路徑
R_PRO_NAME_WORK=${R_PRO_NAME}/work                # work路徑
R_PRO_NAME_LOG=${R_PRO_NAME}/log                  # 日誌
R_PRO_NAME_LINK=${R_PRO_NAME_WORK}/${P_NAME}      # 軟鏈接,灰度發佈
A_PRO_DATE_NAME=${P_NAME}`date +%Y%m%d%H%M`       # 真實名稱,項目名稱
A_PRO_NAME=${R_PRO_NAME_WORK}/${A_PRO_DATE_NAME}  # 真實訪問路徑
JENKINS_SAVE_DIR=/mnt/${P_NAME}                   # jenkins 提交的目錄 /mnt/gmonitor

delete_container() {
    # 如果容器不存在, 解壓完之後就不在刪除配置文件,直接灰度
    /usr/bin/docker container ls | /usr/bin/grep ${P_NAME} &>/dev/null
    if [ $? -eq 0 ]; then
        # 如果存在,先刪除容器,然後在配置上線
        /usr/bin/docker container stop ${P_NAME} &>/dev/null
        /usr/bin/docker container rm ${P_NAME} &>/dev/null
    fi
    project_config

}

project_config() {
    [ ! -d "${R_PRO_NAME}" ] && /bin/mkdir ${R_PRO_NAME}/{log,work} -p
    [ ! -d "${A_PRO_NAME}" ] && /bin/mkdir ${A_PRO_NAME} -p

    /usr/bin/unzip ${JENKINS_SAVE_DIR}/*.war -d ${A_PRO_NAME}/ &>/dev/null  # 解壓文件
    # 如果存在軟鏈接說明曾經上過線
    if [ -L "${R_PRO_NAME_LINK}" ]; then
        if [ -d "${R_PRO_NAME_LINK}/upload" ]; then
           /bin/rm -irf ${A_PRO_NAME}/upload
          /bin/cp -i ${R_PRO_NAME_LINK}/upload ${A_PRO_NAME}/ -r
        fi
        /bin/rm -irf ${A_PRO_NAME}/WEB-INF/classes/*.properties   # 清除配置文件
        /bin/cp -i ${R_PRO_NAME_LINK}/WEB-INF/classes/*.properties ${A_PRO_NAME}/WEB-INF/classes/ -r
        /bin/rm -irf ${R_PRO_NAME_LINK} &>/dev/null    # 刪除軟鏈接
    fi
    /bin/ln -sv ${A_PRO_NAME} ${R_PRO_NAME_LINK} &>/dev/null
}

# 創建新容器
create_container() {
    /usr/bin/docker run -it --name ${P_NAME} --network bridge -p ${P_PORT}:8081 -v ${R_PRO_NAME_LINK}:/usr/local/website/ -v ${R_PRO_NAME_LOG}:/data/tomcat/logs --memory 2048m --memory-reservation 2000m --oom-kill-disable --privileged --restart=on-failure:10 --env TZ='Asia/Shanghai' --volume /etc/localtime:/etc/localtime:ro -d v6-test/tomcat:v8.5.38-jdk8u181-1
}

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