1. 程式人生 > >Jenkins學習筆記

Jenkins學習筆記

Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作。說白了就是減少人工的干預 利用軟體去完成自動化構建的任務,比如web應用釋出,一些php/java/js等語言開發的專案 開發完成後需要部署到遠端伺服器上 從開發者提交程式碼至git上後,一切的事情都有Jenkins去完成。這就是企業中所說的的持續整合(CI),另外還有持續交付(CD) 持續部署(CD)

安裝

安裝方式有rpm包和war包 這2中比較普遍。這裡採用的是rpm

  • 持續整合(Continunous Integration:CI) 程式碼合併,構建,部署,測試都在一起,不斷的執行這個過程,並對結果反饋 持續交付(Continunous Delivery:CD) 部署到生產環境,給使用者使用 持續部署(Continunous Deployment:CD) 部署到生產環境                                                                                                       
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y 
systemctl start jenkins

開啟瀏覽器訪問 http://172.16.113.146:8080

可以看到 密碼儲存在 /var/lib/jenkins/secrets/initiaAdminPassword 下

 

可以按自己的需求定義外掛 這裡就安裝預設外掛

常用外掛

使用者許可權管理

外掛:Role-based Authorization Strategy

設定許可權之前 先允許註冊新使用者 系統管理 >> 全域性安全配置 >> 安全域 >> 允許新使用者註冊

開啟系統管理 進入 Manage and Assign Roles 進入角色許可權配置介面

 

通過角色的許可權 來控制使用者的許可權 Global roles: 全域性角色 User:即為新建立的角色 一般來說只需要一個讀取許可權即可 admin: 預設建立 管理員使用

Project roles:專案角色 Team-A: A-.* # 匹配A開頭的每個專案 Team-B: B-.* # 配配B開頭的每個專案 (之後將使用者新增到專案組裡即可)

將新註冊的使用者 新增到角色中和專案組中

引數化構建 外掛:Extended Choice Parameter 新增引數化構建過程 密碼引數及文字引數 為常用

 

 

 

Git Parmeter 顯示git分支(結合前面定義的引數化構建的branch來使用)

 

Jenkins slave ( 子節點需要有java環境)

 

遠端工作目錄 /var/lib/jenkins 啟動方式SSH 新增使用者名稱密碼 認證方式 Manually trusted key Verification Strategy 構建專案中配置 限制專案的執行節點 填上slave標籤名 就可以指定節點構建

 

pipeline 流水線構建

pipeline構建 其他配置很少 基本都寫在腳本里 node節點 拉取git程式碼 釋出編譯等等… 下圖就是 構建的過程及展示,每個步驟全都分開 並提供日誌檢視

pipeline的核心概念: node:節點 一個node就是一個jenkins節點,或者是master,或者是agent,是執行step的菌體環境

step:步驟 step是一個最基本的操作單元,由各類jenkins plugin提供

stage:階段 一個pipeline可以劃分為若干個stage,每個stage代表一組操作,例如build,test,deploy stage是一個邏輯分組的概念,可以跨多個node

官方提供的github示例指令碼語法:

node {    // 如果在從節點構建 在這裡宣告
   def mvnHome
   stage('Preparation') { // stage是步驟 這是拉取git程式碼
      git 'https://github.com/jglick/simple-maven-project-with-tests.git'
      mvnHome = tool 'M3'
   }
   stage('Build') { //構建
      if (isUnix()) {
         sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean package"
      } else {
         bat(/"${mvnHome}\bin\mvn" -Dmaven.test.failure.ignore clean package/)
      }
   }
   stage('Results') {  // 結果/打包
      junit '**/target/surefire-reports/TEST-*.xml'
      archive 'target/*.jar'
   }
}

也可以將指令碼放到git上 便於指定

# 這是一個以wordpress為例的指令碼:
node ("slave-172.16.113.149") {
    stage('git checkout') {
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submodu
leCfg: [], userRemoteConfigs: [[url: '[email protected]:/home/git/repos/wordpress.git']]])
    }
    stage('code copy') {
        sh '''rm -rf ${WORKXPACE}/.git
        cp -rf /usr/share/nginx/html /data/backup/html-$(date +"%Y-%m-%d")
        rm -rf /usr/share/nginx/html/*
        cp -rf ${WORKSPACE} /usr/share/nginx/html
        echo "ok" >> /usr/share/nginx/html/A-pipeline-wp/status.html'''
    }
    stage('test') {
        sh '''curl http://wps.qxfell.com/status.html'''
    }
}
# 這是一個以maven構建的指令碼例子:
node ("slave-172.16.113.147") {
    stage('git checkout') {
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submodu
leCfg: [], userRemoteConfigs: [[url: '[email protected]:/home/git/repos/solo.git']]])
    }
    stage('maven build') {
        sh '''
        echo $(hostname)
        export JAVA_HOME=/usr/local/jdk8u45
        /usr/local/maven-3.5/bin/mvn clean package -Dmaven.test.skip=true'''
    }
    stage('deploy') {
        sh '''export JAVA_HOME=/usr/local/jdk8u45
        JENKINS_NODE_COOKIE=dontkillme
        TOMCAT_NAME=tomcat8
        TOMCAT_HOME=/usr/local/$TOMCAT_NAME
        WWWROOT=$TOMCAT_HOME/webapps/ROOT
        [ -d $WWWROOT ] &&  mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%Y-%m-%d")
        rm -rf $WWWROOT/*
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT
        PID=$(ps -ef | grep catalina | grep -v "grep" | awk \'{print $2}\')
        [ -n "$PID" ] && kill -9 $PID
        /bin/bash $TOMCAT_HOME/bin/startup.sh
        echo "ok" >> $WWWROOT/status.html'''
    }