實際應用程序中,一般多分支流水線的方式用得比較多一些,
master 對應 生成環境
develop 對應 測驗環境,
將不同分支的代碼構建到不同的環境中
添加 Jenkinsfile 檔案
Jenkinsfile 內容見:Jenkins Pipeline 流水線 - 完整構建 Pipeline Script 腳本
DevOps/trunk 專門用來放運維腳本

提交 Jenkins 到 SVN
注意代碼要放到 trunk,branches 等 分支中
創建多分支流任務




運行

多個 stage 使用不同代理,會在每一步都進行SVN 的切換

pipeline {
agent { label 'JenkinsAgent' }
parameters {
string defaultValue: '4.2', description: '編譯版本號', name: 'BUILD_NUMBER'
}
tools {
maven 'Maven36' //添加 Maven 工具
}
stages {
stage('CheckOut SVN Code') {
steps {
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'c3b4ef0e-b414-4376-8a21-2e08e1c84dfb', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]) //該腳本由流水線語法自動生成
echo 'CheckOut SVN Success'
}
}
// Jenkinsfile 的 地址和代碼不在同一個倉庫下時,需要用這種嵌套的方式,否則,代碼剛拉下來,執行第二個 stage 時就被洗掉了,
stage('Maven Build') {
steps {
bat 'mvn clean package -Dmaven.test.skip=true'
echo 'Maven Build Success'
}
}
//Docker 在 3.88服務器
stage('Docker Build 、Push Repository') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'DockerPublishSSH', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/demojenkins.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
cd /opt/jenkins/PipelineDemo
docker build -t registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER} .
docker login -u hi帳號[email protected] -p 密碼 registry.cn-shanghai.aliyuncs.com
docker push registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
echo 'Docker SUCCESS'
}
}
//K8S 在 3.181服務器
stage('K8S Deployment') {
steps {
script {
def remote = [:]
remote.name = 'K8S Server'
remote.host = '172.16.3.181'
remote.allowAnyHosts = true
withCredentials([usernamePassword(credentialsId: 'K8SMaster', passwordVariable: 'password', usernameVariable: 'username')]) {
remote.user = "${username}" // 變數要使用“”雙引號
remote.password = "${password}" //把憑證中的用戶名、密碼拿出來給 remote引數
}
sshCommand remote: remote, command: "kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}"
echo 'K8S Deployment SUCCESS'
}
}
}
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526838.html
標籤:其他
下一篇:Python第九章實驗報告
