Показать пользовательскую форму, а затем запустить работу - PullRequest
0 голосов
/ 19 мая 2018

Я хочу показать динамически сгенерированную форму (например, со списком существующих в настоящее время ветвей), а затем запустить задание с выбранными параметрами.

Существует Шаг конвейерного ввода , но:

При желании вы можете запросить информацию обратно, отсюда и название шага.Доступ к экрану ввода параметров можно получить по ссылке внизу журнала консоли сборки или по ссылке на боковой панели для сборки.

Мне нужно после нажатия «Построить», чтобы немедленно отобразить пользовательскую форму.

Решение, которое я вижу, состоит в том, чтобы иметь сторонний веб-сервер, который генерирует форму, а затем удаленно запускает задание, но я бы предпочел использовать что-то доступное внутри Jenkins, чтобы у меня был доступ к внутренним компонентам Jenkins, когдарендеринг шаблона формы (с использованием Groovy).

Есть ли решение?

Ответы [ 4 ]

0 голосов
/ 12 июля 2018

Я вижу в JENKINS-46971 есть параметр выбора:

def environmentChoices = ['blue', 'green'].join('\n') 
def stagingEnvironmentInpit = input( message: "apistaging.evolution-software.com is currently pointed to ${currentEnvironment}. Where do you want to promote to?", ok: 'Deploy', parameters: [choice(choices: environmentChoices, name: 'RELEASE_ENVIRONMENT')] ) 
 echo env.RELEASE_ENVIRONMENT

Вы можете адаптировать его к вашему случаю, определив переменную ветвей с помощью списка Gitветви :

def branches = sh(returnStdout: true, script: "git for-each-ref --format='%(refname:short)' refs/heads/")

И используйте это на шаге ввода.

0 голосов
/ 12 июля 2018

Вы пробовали git Parameter Plugin ??
https://wiki.jenkins.io/display/JENKINS/Git+Parameter+Plugin
Окончательный результат будет заполнять список веток из вашего репо, и вы можете выбрать ветку, которую вы бы хотелинравится строить enter image description here

Конфигурация

enter image description here

Это прямо вперед ион построит выбранную вами ветку :) Это создаст только 1 ветку, то есть не будет множественной опции

Если вы захотите сделать множественную опцию, тогда это будет сложно ....

Вы должны получить плагин Active Choices https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin enter image description here

Создать скрипт оболочки (предоставить разрешения) - get_git_branches.sh
добавить в оболочку следующее

#!/bin/bash
GIT_URL=$1
git ls-remote --heads --tags ${GIT_URL} | awk -F" " '{print $NF}'

Конфигурация

Добавить следующее

tags = []
text = "get_git_branches.sh https://user:pass@bitbucket.org/project/repo_name.git".execute().text
text.eachLine { tags.push(it) }
return tags

enter image description here

Трубопровод

node {
    echo States
    def values = Branches.split(',')

    for(value in values)
    println value //build them 'mvn build value'
}

Я привел пример, основанный на ваших "например требованиях", но если вы хотите сделать что-то другое, как вы упомянулиПри заполнении формы Плагин активного выбора - лучшая ставка, поскольку вы можете создать свой собственный скрипт с выбором, текстовым полем, множественным выбором (в основном, рендерингом страниц JavaScript), вики, которую я разместил выше, имеет отличные примеры.
Надеюсь, это поможет:)

0 голосов
/ 12 июля 2018

Вы можете написать свой собственный Jenkinsfile в отличном синтаксисе и сгенерировать параметры для сборки.Вы даже можете создавать свои собственные файлы HTML с этим.Он является частью многоотраслевого плагина для конвейера

. Вы можете получить вид, подобный следующему:

build with parameter

Сследующий Jenkinsfile:

#!/usr/bin/env groovy

def buildInfo
def gitEnv

pipeline {
  agent any

  options {
    timeout(time: 1, unit: 'HOURS')
  }

  tools {
    nodejs 'NodeJS LTS 8.9.4'
  }
  parameters {
    choice(
        choices: 'BUILD_AND_DEPLOY\nBUILD\nDEPLOY_ONLY',
        description: '''
            Sets the desired build and deployment level
            <table>
            <thead>
                <tr>
                <th>Level</th>
                <th>Effect</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                <td>BUILD_AND_DEPLOY</td>
                <td>BUILD and DEPLOY afterwards</td>
                </tr>
                <tr>
                <td>BUILD</td>
                <td>Builds the project and uploads the resulting artifact(s)</td>
                </tr>
                <tr>
                <td>DEPLOY_ONLY</td>
                <td>Fetches the latest service artifact and deploys it. Replaces existing service on the agent if present.</td>
                </tr>
            </tbody>
        ''',
        name: 'deploymentLevel'
    )
  }
  stages {
    stage ('Preparation') {
        steps {
            script {
                // maybe do something special with a tag
                gitEnv = checkout scm
            }
        }
    }

    stage ('Install Dependencies') {
        when {
            anyOf {
                expression { return params.deploymentLevel == 'BUILD' }
                expression { return params.deploymentLevel == 'BUILD_AND_DEPLOY' }
            }
        }
        steps {
          bat 'npm install'
        }
    }
    stage ('and more ...')
    {
       // build and ...
    }
}

Также есть хороший урок, как генерировать выборки из json: Динамические параметры Jenkins с использованием плагина расширенного выбора параметров и Groovy

0 голосов
/ 21 мая 2018

Насколько я знаю, прямого решения для этого нет.Что вы можете попробовать (если это крайне необходимо), вы можете разбить этот шаг на два задания:

  • A
  • B

В задании AВы можете нажать build, а затем отправить письмо с подтверждением или slack с формой, и вы можете заполнить переменные из сборки.Затем в этом письме вы должны указать URL при отправке, который также передает необходимые параметры в виде запроса GET или POST.Этот URL-адрес будет указывать на сценарий на стороне сервера, где с помощью этих параметров вы можете построить задание B. Если вы решите пойти по этому пути и застрять где-нибудь, я могу уточнить.

...