一.環境配置
Linux 環境安裝配置(需要先安裝配置java 環境)
1. Jenkins 主節點安裝配置
a) 下載Jenkins war 包
訪問 https://jenkins.io/download/ 進行下載jenkins 的安裝包
b) 安裝配置方式說明
1) 直接放在tomcat webapps 目錄下,啓動tomcat 即可。
2) 命令行啓動
java -DJENKINS_HOME=/tmp -jar jenkins.war --httpPort=8433 --prefix=/dev
# JENKIINS_HOME 指定數據存放目錄
# httpPort 指定監聽端口
# prefix 指定訪問URI
c) 命令行啓動配置
1. 新建目錄 /opt/j-stg
mkdir -p /opt/j-stg
2. 把jenkins.war 包直接複製到/opt/j-stg 目錄下
cp Jenkins.war /opt/j-stg
3. 建立啓動腳本
4. 啓動服務
chmod 755 oper.sh
./oper.sh start
d) 瀏覽器訪問訪問及初始化
1. 查看文件內容 /opt/j-stg/data/secrets/initialAdminPassword 輸入到管理員密碼字段處
cat /opt/j-stg/data/secrets/initialAdminPassword
2. 輸入文件內容後點擊繼續,選擇插件的安裝
等待一段時間後,插件可以自動安裝完成,如果安裝失敗,可以初始完成後在進行安裝配置。
3. 創建管理員賬號,
4. 進行實例配置
5. 初始化完成,點擊開始使用Jenkins .
e) 建立憑證信息
點擊【憑證】=>【Jenkins】=>【全局憑證】=>【添加憑證】
注: 1. 類型可以根據實際進行選擇,這裏選擇用戶/密碼驗證類型
2. 範圍可以選擇 全局類型 和 系統類型
3. username/password 需要記住,在增加slave 節點時候進行驗證
(2) Slave 從節點配置(linux節點配置說明)
進入【系統管理】=>【管理節點】=>【新建節點】=>【輸入節點名稱,選擇固定節點】
【點擊ok】=>【出現如下界面進行設置】=>【點擊保存】
【點擊節點列表】=>【出現如下界面,對節點進行查看】
二.Jenkins master全局配置:
1. 系統設置
【點擊 系統管理】=>【系統設置】
a) 管理監控配置
b) 設置郵件發送賬號配置
c) 設置郵件通知
d) ant 服務配置
e) SonarQube 服務配置
f) Xcode Builder 配置
2. 全局工具配置
【系統管理】=>【全局工具配置】
a) Jdk 配置設置
1. 指定版本自動安裝
2. 在構建節點手動安裝後,進行手動設置
3.在手動設置完JDK,後可以對每個節點進行自定義配置
b) Maven 配置
c) SonarQube 掃描器安裝配置
三. 構建任務配置
1. 構建任務
a) 點擊【新建任務】
b)
c) Jenkins pipeline 腳本範例
pipeline {
// 設置編譯節點選擇
agent { label '192.168.8.106'}
// 設置腳本全局變量
environment {
r_ftp_user='jenkins_read'
r_ftp_passwd='testp’'
w_ftp_user='jenkins'
w_ftp_passwd='p_aaa '
ftp="10.200.130.19/jenkins_test"
zipfile="${JOB_NAME}.zip"
sonar = tool 'sonar1';
tomcat='/opt/app/tomcat-8'
}
tools {maven 'maven3'
jdk 'jdk1'
}
// 具體pipeline 執行步驟配置
stages {
// 檢出代碼配置
stage('checkout code '){
steps {
git branch: 'dev', credentialsId: '678b2319-7345-4d3e-8738-b6ac7bf32d1d', url: 'git@gitlab/api.git'
}
}
// 編譯 和 SonarQube 檢查
stage('Build && SonarQube analysis') {
steps {
sh """
mvn clean install -Dmaven.test.skip=true
rm -rf *.zip
cd target
zip -qry ../$zipfile api-1.0/*
cd ..
"""
withSonarQubeEnv('SonarQube7.3') {
sh "$sonar/bin/sonar-scanner -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.projectKey=$env.JOB_NAME -Dsonar.projectName=$env.JOB_NAME -Dsonar.projectVersion=1.0 -Dsonar.sources=src -Dsonar.java.binaries=target/classes"
}
}
}
// 編譯產出文件上傳ftp 和對本任務其他階段節點共享配置
stage('上傳ftp zipfile'){
steps {
sh "lftp -c 'open ${w_ftp_user}:${w_ftp_passwd}@$ftp && mkdir -p ${JOB_NAME}/$BUILD_NUMBER && cd ${JOB_NAME}/$BUILD_NUMBER && put $zipfile'"
stash includes: "$zipfile", name: "$zipfile"
}
}
//實際部署階段
stage('deploycode'){
// 併發配置設置
parallel {
stage("server105"){
// 節點選擇
agent { label "192.168.8.105"}
// 在選擇節點部署代碼
steps{
unstash "$zipfile"
sh """
sudo su -c 'cd $tomcat/bin/ &&./shutdown.sh;
cd ../webapps && rm -rf ./*;
mv $WORKSPACE/$zipfile .;
unzip $zipfile;
cd ..;
./bin/catalina.sh start'
"""
}
}
stage("server107"){
// 節點選擇
agent { label '192.168.8.107'}
steps {
unstash "$zipfile"
sh """
sudo su -c 'cd $tomcat/bin/ &&./shutdown.sh;
cd ../webapps && rm -rf ./*;
mv $WORKSPACE/$zipfile .;
unzip $zipfile;
cd ..;
./bin/catalina.sh start'
"""
}
}
}
}
}
// 部署結果處理階段
post{
// 部署結果成功後執行階段
success {
sleep 10
script {
def node = ['192.168.8.105','192.168.8.107']
def rvnode = []
for (int i=0; i<node.size(); i++){
aa = sh returnStatus: true, script:"""
curl -I http://${node[i]}:8080 ;
"""
sh "echo rvcode= $aa"
if ( aa == 0 ) {
rvnode.add(node[i])
}
}
def rvstr = ''
if (rvnode != []){
for (int i=0;i< rvnode.size();i++){
rvstr+='http://' + rvnode[i] + ':8080<br />'
}
} else {
rvstr = '服務器啓動失敗'
}
def body = """
# \${JELLY_SCRIPT,template="html"} <br/>
# \${BUILD_URL}console <br/>
# 訪問路徑:
$rvstr
"""
emailext body: body, subject: '$JOB_NAME', to: '[email protected]'
}
}
// 部署失敗後執行階段
failure {
emailext body: '''
# ${JELLY_SCRIPT,template="html"} <br/>
# ${BUILD_URL}console <br/>
''', subject: '${JOB_NAME}_Build_error', to: '[email protected]'
}
}
}
d) 觸發模式
1. 手動觸發構建
2. 定時觸發構建
3. webhook觸發構建
四. SonarQube Server 服務配置
1. SonarQube安裝
# 下載地址:
# wget –o /usr/local/src/https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.3.zip
# cd /usr/local/src && unzip sonarqube-7.3.zip
# mv sonarqube-7.3.zip /opt/app/sonarqube
# useradd sonar
# cd /opt/app/sonarqube
# cat conf/sonar.properties # 配置文件更具需要進行更改
# su sonar
# cd bin/linux-x86-64/
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum -y install mysql mysql-server mysql-devel
# systemctl enable mysqld
# systemctl start mysqld
# db 初始化
> create database sonar character set utf8 collate utf8_general_ci;
> grant all privileges on sonar.* to 'sonar'@'192.168.8.%' identified by 'sonar‘;
> flush privileges;
2. 服務配置及啓動
[root@centos73-106 conf]# cat sonar.properties | grep ^[a-z]
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.login=admin
sonar.password=admin
sonar.jdbc.url=jdbc:mysql://192.168.8.108:3306/sonar?useUnicode=true&characterEncoding=utf8 \
&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.javaOpts=-Xmx512m –Xms512m -XX:+HeapDumpOnOutOfMemoryError
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.http.maxThreads=50
sonar.web.http.minThreads=5
# useradd sonar
# cd /opt/app/sonarqube
# chown –R sonar.sonar /opt/app/sonarqube
# su soner
$ ./sonar.sh start # 使用普通用戶 啓動sonar server 服務
3. SonarQube 使用設置
a) 設置中文
b) 設置令牌Token
[配置] => [權限] => [點擊令牌] => 生成令牌
4. 掃描測試:
./bin/sonar-scanner -Dsonar.host.url=http://192.168.8.106:9000
-Dsonar.projectKey=test -Dsonar.projectName=test
-Dsonar.projectVersion=1.0 -Dsonar.sources=src
-Dsonar.java.binaries=target/classes
-Dsonar.login=SONAR_AUTH_TOKEN
# Jenkisn pipeline sonar scan 常用參數
-Dsonar.host.url=$SONAR_HOST_URL
-Dsonar.login=$SONAR_AUTH_TOKEN