Jenkins — Active Choice: PostgreSQL — Вернуть результат SELECT запроса

Для параметризованной сборки с выбором результата на основе SQL запроса, понадобится плагин Active Choices

Переходим в настройки Jenkins

 

Раздел "Управление плагинами"

 

Переходим к вкладке "Доступные" и в поиске указываем "Active Choices"

Устанавливаем его. Так же необходим плагины:

Создаем "New Item" — "Pipeline", указываем, что это будет параметризованная сборка, и добавляем параметр "Active Choices Parameter"

 

 

 

Указываем, что это "Groovy Script" и вставляем туда следующее:

import groovy.sql.Sql
import java.sql.Driver

credentialsId = 'artem-services-rds-credentials'
url = 'artem-services-rds.xxxxxxxxxxxx.eu-central-1.rds.amazonaws.com:5432/postgres'

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
  com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{
    it.id == credentialsId
  }

def driver = Class.forName('org.postgresql.Driver').newInstance() as Driver 

def props = new Properties()
props.setProperty("user", "${creds.username}") 
props.setProperty("password", "${creds.password}")

def conn = driver.connect("jdbc:postgresql://${url}", props) 
def sql = new Sql(conn)

def artifact = []

artifact.add("Not selected")

def rows = sql.rows("select * from users").each { row ->
  artifact.add("$row.first_name")
}

return artifact

 

Где значение переменных, "credentialsId" — Jenkins Credentials ID с логином и паролем для подключения к базе данных;

"url" — строка подключения к базе (endpoint + port + db name);

 

Данный Active Choice делает SELECT запрос к таблице "users" и возвращает только значения полей "first_name", так же на первую позицию результата добавляет "Not selected".

Метки: Метки

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Денис Несмеянов
Денис Несмеянов
11 месяцев назад

Скрипт из статьи не работал ни в active choice, ни в script console, немного похимив, я пришёл к такому решению: properties([    parameters([        [$class: 'ChoiceParameter',            choiceType: 'PT_SINGLE_SELECT',            description: 'Выберите базу данных',            filterLength: 1,            filterable: false,            name: 'DATABASE',            script: [                $class: 'GroovyScript',                fallbackScript: [                    classpath: [],                    sandbox: false,                    script: ""                ],                script: [                    classpath: [],                    sandbox: false,                    script: '''                        import groovy.sql.Sql                        import java.sql.Driver                        import jenkins.*                        import jenkins.model.*                        import hudson.*                        import hudson.model.*                        credentialsId = 'srl-pgsql-01-adidas-postgres-credentials'                        url = 'srl-pgsql-01.adidas:5432/postgres'                        def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(                        com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{                            it.id == credentialsId}                        def driver = Class.forName('org.postgresql.Driver').newInstance() as Driver                        def props = new Properties()                        props.setProperty("user", "${creds.username}")… Подробнее »