Files
demo/jenkins/1cdb.groovy
Pavel Guzaev 431b4f5cfd all demo
2024-03-09 17:36:50 +05:00

236 lines
6.9 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>
"""
}