all demo
This commit is contained in:
237
jenkins/getmailbox.groovy
Normal file
237
jenkins/getmailbox.groovy
Normal 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>
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user