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

238 lines
8.2 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
// 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>
"""
}