all demo
This commit is contained in:
235
jenkins/1cdb.groovy
Normal file
235
jenkins/1cdb.groovy
Normal file
@@ -0,0 +1,235 @@
|
||||
import java.text.SimpleDateFormat
|
||||
import groovy.transform.Field
|
||||
@Field List props = []
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
parameters {
|
||||
choice(
|
||||
name: 'ACTION',
|
||||
choices: ['DAY','WEEK'],
|
||||
description: 'Выбор бэкапа'
|
||||
)
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
timestamps()
|
||||
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||
skipDefaultCheckout()
|
||||
timeout(time: 360, unit: 'MINUTES')
|
||||
}
|
||||
environment {
|
||||
BUILD_USER = getBuildUser()
|
||||
CURRENT_DATE = new Date().format( 'dd.MM.yy_HH:mm' )
|
||||
}
|
||||
|
||||
|
||||
triggers{
|
||||
parameterizedCron('''
|
||||
30 19 * * 1,2,3,4 %ACTION=DAY
|
||||
30 19 * * 5 %ACTION=WEEK
|
||||
''')
|
||||
}
|
||||
|
||||
|
||||
stages {
|
||||
|
||||
stage('Prepare_MASTER') {
|
||||
agent {label "master"}
|
||||
steps {
|
||||
deleteDir()
|
||||
gitClone("master")
|
||||
}
|
||||
}
|
||||
|
||||
stage('Prepare_SITE') {
|
||||
agent {label "net"}
|
||||
steps {
|
||||
deleteDir()
|
||||
gitClone("master")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////
|
||||
stage('1CDB') {
|
||||
agent {label "master"}
|
||||
when { beforeAgent true
|
||||
anyOf {environment name: 'ACTION', value: 'DAY'; environment name: 'ACTION', value: 'WEEK'}
|
||||
}
|
||||
|
||||
steps {
|
||||
pwsh script: "./site/1cdb_session.ps1 1CDB"
|
||||
updateDesc("${env.STAGE_NAME}")
|
||||
sendME("${env.STAGE_NAME}","Backup success!!!")
|
||||
telegramSend(message: '1C backup success!!!', chatId: 648920818)
|
||||
}
|
||||
}
|
||||
////
|
||||
|
||||
stage('Move_day') {
|
||||
agent {label "master"}
|
||||
when { beforeAgent true
|
||||
anyOf {environment name: 'ACTION', value: 'MOVE'; environment name: 'ACTION', value: 'DAY'}
|
||||
}
|
||||
steps {
|
||||
sh '''
|
||||
mv /srv/SITE/1CDB*.7z /srv/SITE/1CDB/
|
||||
find /srv/SITE/1CDB/ -name "*.7z" -mtime +10 -exec rm -f {} \\;
|
||||
'''
|
||||
telegramSend(message: 'Day 1CDB MOVE success!!!', chatId: 648920818)
|
||||
}
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
////
|
||||
|
||||
stage('Move_week') {
|
||||
agent {label "master"}
|
||||
when { beforeAgent true
|
||||
anyOf {environment name: 'ACTION', value: 'MOVE'; environment name: 'ACTION', value: 'WEEK'}
|
||||
}
|
||||
steps {
|
||||
sh '''
|
||||
mv /srv/SITE/1CDB*.7z /srv/1CSRV/1CDB/
|
||||
find /srv/1CSRV/1CDB/ -name "*.7z" -mtime +60 -exec rm -f {} \\;
|
||||
'''
|
||||
telegramSend(message: 'WEEK 1CDB MOVE success!!!', chatId: 648920818)
|
||||
}
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
node ("master") {
|
||||
jabberNotify notificationStrategy: 'success', notifyCulprits: true, notifyFixers: true, notifySuspects: true, notifyUpstreamCommitters: true, extraMessage: 'Бэкап 1С завершен успешно', targets: 'user@domen'
|
||||
}
|
||||
}
|
||||
|
||||
aborted {
|
||||
node ("master") {
|
||||
jabberNotify notificationStrategy: 'aborted', notifyCulprits: true, notifyFixers: true, notifySuspects: true, notifyUpstreamCommitters: true, extraMessage: 'Бэкап 1С пришлось остановить', targets: 'user@domen'
|
||||
}
|
||||
}
|
||||
failure {
|
||||
node ("master") {
|
||||
jabberNotify notificationStrategy: 'failure', notifyCulprits: true, notifyFixers: true, notifySuspects: true, notifyUpstreamCommitters: true, extraMessage: 'Бэкап 1С завершился с ошибкой', targets: 'user@domen'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def getBuildUser() {
|
||||
return currentBuild.rawBuild.getCause(Cause.UserIdCause)?.getUserId()
|
||||
}
|
||||
|
||||
def updateDesc(ACTION)
|
||||
{
|
||||
def d = [ACTION: '', BACKUP_DATE: '', END_TIME: '']
|
||||
END_TIME = new Date().format( 'dd.MM.yy_HH:mm' )
|
||||
d.ACTION = "${ACTION}"
|
||||
d.BACKUP_DATE = "${CURRENT_DATE}"
|
||||
d.END_TIME = "${END_TIME}"
|
||||
d1 = d.clone()
|
||||
props << d1
|
||||
println d1
|
||||
d.clear()
|
||||
println props
|
||||
println d
|
||||
println "${END_TIME}"
|
||||
def item = Jenkins.instance.getItemByFullName("${JOB_NAME}")
|
||||
item.setDescription("${getDescTemplate(props)}")
|
||||
|
||||
|
||||
}
|
||||
|
||||
def sendME(ACTION,STATUS)
|
||||
{
|
||||
emailext body: "${STATUS}",
|
||||
subject: "${ACTION}",
|
||||
to: 'therion@nasda.ru'
|
||||
}
|
||||
|
||||
|
||||
def gitClone(String stand) {
|
||||
checkout poll: false, scm: [
|
||||
$class: 'GitSCM',
|
||||
branches: [[name: '*/master']],
|
||||
doGenerateSubmoduleConfigurations: false,
|
||||
userRemoteConfigs: [[url: 'git@gitlab.domen:user/sys.git']]
|
||||
]
|
||||
}
|
||||
|
||||
def scriptDir = getClass().protectionDomain.codeSource.location.path
|
||||
println "${scriptDir}"
|
||||
|
||||
String currentDir = new File(".").getAbsolutePath()
|
||||
|
||||
|
||||
def getDescTemplate(List props) {
|
||||
return """
|
||||
<?xml version="1.0" encoding="UTF-8"?><html>
|
||||
<body>
|
||||
<b>Задача бэкапирует сетевые диски</b>
|
||||
<div style="font-wight:bold;">
|
||||
Если сборка не прошла, звонить :)
|
||||
</div>
|
||||
<style>
|
||||
.backup_table { margin:15px 0; border:none; border-collapse:collapse; border-spacing:0; font-size:100%; width: 100%;}
|
||||
.backup_table th, .stand_table td { padding:3px 4px; border: 1px solid #cdcdcd; }
|
||||
.backup_table th { text-align:center; font-weight:bold; border: 1px solid #cdcdcd; background:#f9efcf; }
|
||||
.backup_table .last_update { text-align:right; font-size:75%; border:none; }
|
||||
.backup_table .stand:hover { background:#f6faf2; }
|
||||
.backup_table .col_title { width:120px; }
|
||||
</style>
|
||||
<table class="backup_table">
|
||||
<tr>
|
||||
<th colspan="8" style="text-align:left;">Задания бэкапа:</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th abbr="ACTION">Бэкапирование</th>
|
||||
<th abbr="BACKUP_DATE">Дата выполнения</th>
|
||||
<th abbr="END_TIME">Время завершения</th>
|
||||
</tr>
|
||||
${props.collect { prop ->
|
||||
def idx = props.findIndexOf { it.equals(prop) }
|
||||
return """ <tr class="mail">
|
||||
<td abbr="ACTION">${prop.ACTION}</td>
|
||||
<td abbr="BACKUP_DATE">${prop.BACKUP_DATE}</td>
|
||||
<td abbr="END_TIME">${prop.END_TIME}</td>
|
||||
</tr>"""
|
||||
}.join('')}
|
||||
|
||||
|
||||
</table>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>При запуске необходимо указать параметры:
|
||||
<br/>
|
||||
<ul>
|
||||
<li>
|
||||
<b>ACTION</b> - выполняемое действие (DAY, WEEK)
|
||||
<ul>
|
||||
<li>
|
||||
<b>DAY</b> - Ежедневный бэкап 1С, автоматически делается в 19:30 с понедельника по четверг, архивы в C:\\Backup\\1CDB на сервере SITE
|
||||
</li>
|
||||
<li>
|
||||
<b>WEEK</b> - Еженедельный бэкап 1С, автоматически делается в 19:30 в пятницу, архивы в C:\\Backup\\1CDB на сервере 1CSRV
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user