This commit is contained in:
Pavel Guzaev
2024-03-09 17:36:50 +05:00
commit 431b4f5cfd
44 changed files with 3239 additions and 0 deletions

237
jenkins/getmailbox.groovy Normal file
View File

@@ -0,0 +1,237 @@
import java.text.SimpleDateFormat
import groovy.transform.Field
// Misc manipulations
import java.nio.charset.StandardCharsets
pipeline {
agent {
node {
label 'mail_acc'
}
}
parameters {
choice(
name: 'ACTION',
choices: ['New-Mail', 'Delete-Mail', 'Get-Mail'],
description: 'Выбор действия, Get-Mail - только обновит список пользователей'
)
string(
name: 'email',
defaultValue: '@domain',
description: 'Желаемый email пользователя, если меняем пароль, выбираем из списка, при создании нового, выбрать свободное имя'
)
string(
name: 'MailPass',
defaultValue: '123qweASD',
description: 'Пароль пользователя, стандартный лучше не использовать, во избежании случайного подключения другого пользователя'
)
booleanParam(
name: 'NeedSharedMail',
defaultValue: false,
description: 'Нужны права на общий ящик: shared@domain'
)
}
options {
disableConcurrentBuilds()
timestamps()
buildDiscarder(logRotator(numToKeepStr: '10'))
skipDefaultCheckout()
timeout(time: 40, unit: 'MINUTES')
}
environment {
BUILD_USER = getBuildUser()
CURRENT_DATE = new Date().format('dd.MM.yy_HHmm')
DIR_MAIL = "./jenkins/ps1/"
username = "${BUILD_USER}"+"${BUILD_ID}"
}
stages {
stage('getmail') {
when {
beforeAgent true
environment name: 'ACTION', value: 'Get-Mail'
}
steps {
dir("${DIR_MAIL}") {
powershell '''
./getmailbox.ps1
'''
updateDesc('mailbox.nausd')
}
}
}
stage('newmail') {
when {
beforeAgent true
environment name: 'ACTION', value: 'New-Mail'
}
steps {
dir("${DIR_MAIL}") {
println "${username}"
println "${email}"
println "${MailPass}"
powershell script: "./newmailbox.ps1 $username $email $MailPass $NeedSharedMail"
updateDesc('mailbox.nausd')
}
}
}
stage('removemailbox') {
when {
beforeAgent true
environment name: 'ACTION', value: 'Delete-Mail'
}
steps {
dir("${DIR_MAIL}") {
println "${username}"
println "${email}"
println "${MailPass}"
powershell script: "./removemailbox.ps1 $email"
updateDesc('mailbox.nausd')
}
}
}
}
}
def updateDesc(String propertyFile) {
def keyMapping = [
DisplayName: 'UserName',
WindowsEmailAddress: 'EMail',
CustomAttribute1: 'Password',
]
def props = []
def mailInfo = [:]
readFile("${propertyFile}").split('\n').each { line ->
if (!line.isEmpty()) {
def fields = line.split(':').collect { it.trim() }
mailInfo.put(keyMapping.get(fields.first()), fields.last())
if (fields.first().equals(keyMapping.keySet().last())) {
props.add(mailInfo.clone())
mailInfo.clear()
}
} else {
return
}
}
int NUMBER_OF_MAILS = props.size();
println("NUMBER_OF_MAILS: ${NUMBER_OF_MAILS}")
props.each {
println("Mail Info <br />: ${it}")
}
def item = Jenkins.instance.getItemByFullName("${JOB_NAME}")
item.setDescription("${getDescTemplate(props)}")
}
def getBuildUser() {
return currentBuild.rawBuild.getCause(Cause.UserIdCause)?.getUserId()
}
/*
def gitClone(String stand) {
checkout poll: false, scm: [
$class : 'GitSCM',
branches : [[name: 'master']],
doGenerateSubmoduleConfigurations: false,
userRemoteConfigs : [[url: 'git@gitsd.naumen.ru:repo/scripts_tpivi.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>Задача управляет тестовым почтовым сервером <a href="https://naupp.naumen.ru/sd/operator/#uuid:hardware\$102717801">Exchange</a></b>
<div style="font-wight:bold;">
Если сборка не прошла, то обращаться в ТПиВИ
</div>
<style>
.mail_table { margin:15px 0; border:none; border-collapse:collapse; border-spacing:0; font-size:100%; width: 100%;}
.mail_table th, .stand_table td { padding:3px 4px; border: 1px solid #cdcdcd; }
.mail_table th { text-align:center; font-weight:bold; border: 1px solid #cdcdcd; background:#f9efcf; }
.mail_table .last_update { text-align:right; font-size:75%; border:none; }
.mail_table .stand:hover { background:#f6faf2; }
.mail_table .col_title { width:120px; }
</style>
<table class="mail_table">
<tr>
<th colspan="8" style="text-align:left;">Почтовые ящики:</th>
</tr>
<tr>
<th abbr="UserName">Имя пользователя</th>
<th abbr="EMail">Почтовый ящик пользователя</th>
<th abbr="Password">Пароль пользователя</th>
</tr>
${props.collect { prop ->
def idx = props.findIndexOf { it.equals(prop) }
return """ <tr class="mail">
<td abbr="UserName">${prop.UserName}</td>
<td abbr="EMail">${prop.EMail}</td>
<td abbr="Password">${prop.Password}</td>
</tr>"""
}.join('')}
</table>
<br/>
<br/>
<br/>При запуске необходимо указать параметры:
<br/>
<ul>
<li>
<b>ACTION</b> - выполняемое действие (New-Mail, Delete-Mail, Get-Mail)
<ul>
<li>
<b>New-Mail</b> - Создание нового ящика пользователя или обновление существующего
</li>
<li>
<b>Delete-Mail</b> - Удаление ящика пользователя в котором отпала необходимость ( попутно вычистит ящики к которым не было подключения более года )
</li>
<li>
<b>Get-Mail</b> - Обновит список почтовых ящиков с сервера
</li>
</ul>
</li>
<li>
<b>Имя пользователя</b> - Формируется из параметров сборки
</li>
<li>
<b>Почтовый ящик пользователя</b> - Должен быть в формате login@domain. Допускаются только символы латинского алфавита
</li>
<li>
<b>Пароль пользователя</b> - Не менее 8 сиволов разного регистра и цифры. Рекомендуется использовать пароль отличный от стандартного
</li>
<li>
<b>shared@domain</b> - Общий почтовый ящик, подключается галочкой в сборке при создании нового или изменениии параметров текущего почтового ящиков
</li>
<li>
<b>Веб интерфейс для доступа</b> - <a href="https://win2016-dc-exch.domain/owa/">https://win2016-dc-exch.domain/owa/</a>
</li>
</ul>
</body>
</html>
"""
}