jenkins pipline和jenkinsfile


Jenkins Pipeline(或簡稱為 "Pipeline")是一套插件,將持續交付的實現和實施集成到 Jenkins 中。

Jenkins Pipeline 提供了一套可擴展的工具,用於將“簡單到復雜”的交付流程實現為“持續交付即代碼”。Jenkins Pipeline 的定義通常被寫入到一個文本文件(稱為Jenkinsfile)中,該文件可以被放入項目的源代碼控制庫中。
 
Jenkinsfile 能使用兩種語法進行編寫 - 聲明式和腳本化。
  • 相比腳本化的流水線語法,他提供更豐富的語法特性。
  • 是為了使編寫和讀取流水線代碼更容易而設計的。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}

Jenkinsfile (Scripted Pipeline)

node {  
    stage('Build') { 
        // 
    }
    stage('Test') { 
        // 
    }
    stage('Deploy') { 
        // 
    }
}

下面將以聲明式腳本為例,介紹jenkinsfile:

設置運行的agent
pipeline {
agent {label 'jenkins-slave'} // 配置構建項目在標簽為jenkins-slave的機器上運行
.....
}
使用多個agent
pipeline {
    agent none
    stages {
        stage('Build') {
            agent any
            steps {
               echo "build..."
            }
        }
        stage('Test on Linux') {
            agent { 
                label 'linux'
            }
            steps {
               echo "test..."
            }
}
.....
}

配置可選參數

  agent any
  options{
        disableConcurrentBuilds() //不允許同時執行流水線
        skipDefaultCheckout()  //默認跳過來自源代碼控制的代碼
        timeout(time: 10, unit: 'MINUTES') //設置流水線運行的超時時間
        timestamps() //預定義由Pipeline生成的所有控制台輸出時間
    } 
    .....

配置全局變量

  environment { 
      service="java" 
    }
.....

配置局部變量

stage('Deploy'){
steps {
withEnv(['service=java']){
    echo '$service'
}}}
.....

配置可選參數

  parameters{
       string(name: 'branch', defaultValue: 'dev', description: 'which branch do you want to build?')
       choice(name: 'service',choices:"java\nnodejs",description: "服務名")
    }
.....

配置機密文本、用戶名和密碼

    stage('Deploy'){
      steps {
       withCredentials([usernamePassword(credentialsId: 'aliyun_oss_upload', passwordVariable: 'aliyun_sceret', usernameVariable: 'aliyun_key')]) {
       sh '~/ossutil config -e ${endpoint} -i ${aliyun_key} -k ${aliyun_sceret};~/ossutil cp -r -f dist "oss://${name}"'
      }}}

注:需先在jenkins添加用戶憑據

拉取代碼

    stage('Checkout') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '3', url: 'ssh://git@giturl/javacode.git']]])
      }
    }

#在job中點擊Pipline Syntax ,選擇checkout out from version control ,選擇git輸入倉庫地址,生成拉取代碼配置

定義構建完成后執行動作

  post {
        success {
            echo '構建成功'
        }
        failure {
            echo '構建失敗'
        }
        unstable {
            echo '該任務被標記為不穩定任務'
        }
        aborted {
            echo '該任務被終止' 
        }
    }

條件判斷

    stage('Build'){
      steps {
        script { 
          if ("${gitrepo}" == "java") {
                             echo "java"
          }         
          else if ("${gitrepo}" == "python"){
             echo "python"
          } else {
             echo "nodejs"
           } 
          }            
      }
    }

#if 需定義在script{}內

獲取命令返回值

    stage('Push'){
      steps {
        script{
        def pid = sh returnStatus: true, script: " ps -ef|grep tomcat|awk '{print \$2}'"
        echo '$pid'
      }   
      }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM