Pull to refresh

Comments 15

Вещь интересная, но на текущий момент не так необходима. Проще запускать сборки по событию в Гите и не озадачивать пользователя выбором вручную.
Я тоже так первое время думал, пока не столкнулся с развертыванием платформы, в которой более 100 микросервисов и огромное количество различных настроек.
Для CI процесса я полностью согласен, что каждая команда должна отвечать за сборку своего дистрибутива и проще делать, как вы говорите.

Мы примерно так делаем, но на этапе деплоя. Разные релизные циклы по странам приводят к необходимости выбора из какой сборки выкладывать артифакты и конфигурацию.

Да, это удобно для пользователя джобы.
Мы тоже делаем на этапе деплоя и при использовании каких-то системных джобов.
Как я уже писал в статье, это просто учебный пример, который было легко сделать на примере CI :)
Век живи, век учись. Уже сколько всего под Jenkins делал, а такой тип параметров ни разу не пробовал. Спасибо, пригодится.
Это точно!
А вообще, есть еще плагин, который позволяет не просто html отрисовывать, как показано в статье, а прям писать UI с помощью React.
Но, к сожалению, я пока им не пользовался, поэтому ничего не могу сказать.
Ссылка на плагин.
Почему выбрали именно «Active Choices Reactive Reference Parameter»?
Можно не возиться с форматированием HTML, а просто выбрать «Active Choices Reactive Parameter» и в нём «Single Select». Тогда достаточно вернуть из скрипта лист вариантов.
У нас используется более сложный интерфейс (таблицы, в которых чек боксы и прочее), поэтому без HTML никак.
Если говорить про данный пример, то я полностью с вами согласен, но хотелось раскрыть побольше возможностей, поэтому решил и тут такой тип параметров показать.
Согласен, для сложных конструкций Ваш вариант удобнее. Послал коллеге статью :)
Очень годная подсказка, некоторое время назад искал как раз что-то похожее, но кроме костылей ничего не нашел — видимо не то искал :(
Спасибо за наводку на плагин.
Проблема того что после нажатия Build with Parameters страница блокируется до того момента как скрипт получит все данные до сих пор осталась?
Ну и в 2020 без пайплайна набивать джобы руками уже не должно быть актуально.
Под блокируется вы имеется в виду экран ожидания?
У нас это происходит за считанные секунды, поэтому дискомфорта от этого не испытываем.
Поделитесь, пожалуйста, кейсом, когда это действительно очень долго, очень интересно :)

Ну а по поводу pipeline — я считаю у каждого типа задач есть свое применение, и не стоит, например, создавать pipeline, если вам нужно выполнить пару команд из bash.
Пробовал этот плагин несколько лет назад, может что-то поменялось. Смысл в том что если скрипт выполняется долго (затупила сеть, не отвечает внешний сервис и т.п.) то страница просто не отрисовывается пока не завершится скрипт. Т.е. пользователю кажется что тормозит сам дженкинс. Я думаю, лучшим поведением было отобразить всю стриницу без полей ввода, а на месте этих полей какой-то прогресс бар или крутилку. После завершения работы скрипта уже дорисовать инпуты.
Нет, сейчас все хорошо, когда происходит загрузка данных, то страница прогружается, но появляется крутилка Loading.
Вдохновившись данной статьёй, начал активно использовать эти «active» параметры в трёх случаях:
1. Получаем ветки из любого репозитория, который указан в Choice Parameter «repoName» (Active Choices Reactive Parameter “projectBranchName”):

AUTH = "loginAndPassInBase64"
GIT_URL = "https://bitbucket.ru"
PROJECT = "yourProjectName"
 
def getBranchesFromRepoName(repoName) {
    def branches = []
    def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT}/repos/${repoName}/branches"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.values.each {
        branches.add(it.displayId)
    }
    return branches
}
return getBranchesFromRepoName(repoName)

2. Получаем все версии необходимого артефакта из необходимых репозиториев (nexus2) в виде Active Choice Parameter «artifactVersion»:

AUTH = "loginAndPassInBase64"
NEXUS_URL = "http://nexus.ru:8080"
ARTIFACT_GROUP = "your.group"
ARTIFACT_NAME = "your.artifact.name"
RELEASE_REPO = "Artifact_release"
SNAPSHOT_REPO = "Snapshot_release"

def getArtifactVersions() {
    def artifactVersions = []
    def endpoint = NEXUS_URL + "/nexus/service/local/data_index?g=${ARTIFACT_GROUP}&a=${ARTIFACT_NAME}"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new XmlSlurper().parseText(conn.content.text)
    response.data.artifact.findAll {it.repoId == "${RELEASE_REPO}" || it.repoId == "${SNAPSHOT_REPO}"}.each {
      artifactVersions.add(it.version.text())
    }
    return artifactVersions
}
return getArtifactVersions()

3. получаем все теги необходимого образа из docker registry (nexus 3), приведу пример, когда не требуется авторизация:

REGISTRY_URL = "https://registrynexus3.ru"
PATH_TO_IMAGE = "your/path"
IMAGE_NAME = "yourImageName"
def getImageVersions() {
    def imageVersions = []
    def endpoint = REGISTRY_URL + "/v2/${PATH_TO_IMAGE}/${IMAGE_NAME}/tags/list"
    def conn = new URL(endpoint).openConnection()
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.tags.each {
        imageVersions.add(it)
    }
    return imageVersions
}
return getImageVersions()
Sign up to leave a comment.

Articles