получить локальную ветку GIT на сборке jenkins - PullRequest
1 голос
/ 30 мая 2019

Мы работаем над множеством функций: одна ветвь разработки, выпуска и освоения GIT.Мы создаем отдельные ветви функций для всех задач разработки JIRA.Мне нужно, чтобы Дженкинс собрал задание, чтобы опросить все ветви функций и построить те, которые имеют недавние события PUSH.После того, как задание на сборку инициировано, я хочу, чтобы было выбрано определенное имя ветви объекта GIT (т.е. JIRA-1234, а не origin / feature / JIRA-1234), включив его в имя файла артефакта как APP-0.0.1-JIRA-1234-SNAPSHOT и сохраните его в Nexus.

Примечание: файл POM.XML сконфигурирован с APP-0.0.1-SNAPSHOT.

Для каждой сборки ветви объектов нам нужны отдельные файлы JAR.сохранено в Nexus.Например: задача разработки под JIRA-0101 создаст и сохранит jar в нексусе как APP-0.0.1-JIRA-0101-SNAPSHOT

Я включил параметр $ {branch} в POM.xml, как показано ниже:APP-0.0.1 $ {branch} -SNAPSHOT

и передать это значение из команды сборки Jenkins как - mvn clean install -Dbranch = -JIRA-0101

Затем я параметризовал задачу сборки jenkinsпосле чего я могу получить имя ветви объекта как «origin / feature / JIRA-0101», но не могу разобрать всю эту строку в Jenkins, чтобы выбрать только задачу JIRA.

Во-вторых, mvn jgitflow: release-start иКоманды mvn jgitflow: release-finish могут создать сложности, имеющие «APP-0.0.1 $ {branch} -SNAPSHOT» в POM.xml.Таким образом, использование $ {branch} в POM неэффективно.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Если я правильно понял, вы хотите, чтобы ваш Jenkins автоматически использовал push-события и в случае успеха опубликовал папку target в своем нексусе.Если это так, я бы предложил рассмотреть что-то более продвинутое, называемое JenkinsFile (https://jenkins.io/doc/book/pipeline/jenkinsfile/)) с парой плагинов jenkins, например Multibranch pipeline https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin, которые могут автоматически обнаруживать все ветви вваш репозиторий и настройте работу для каждого из них. Затем вам понадобятся веб-хуки (как у bitbucket, так и у github), и эти хуки будут информировать ваших jenkins о push-событиях (или о любом другом желаемом событии, например коммите / комментировании и т. д.), которыевызовет работу по сборке. Некоторые плагины (например, плагин для ветки Bitbucket https://wiki.jenkins.io/display/JENKINS/Bitbucket+Branch+Source+Plugin) предлагают сервис, который обрабатывает эти веб-зацепки, поэтому вам не придется делать это вручную (вручную: вы должны ввести URL-адрес задания и команду executeнапример, ci: port / yourJob /? build [не могу вспомнить весь URL-адрес, который был с тех пор, как я его использовал], автоматический POST ci: port / bitbucket-scmsource-hook / notify /, который является универсальным, и плагин перенаправляет ловушку насоответствующую работу.). В качестве последнего шага вашего конвейера jenkinsfile вы можете добавить команду pushexus, который добавит файл / файлы, которые вы хотите в вашем нексусе.!

Надеюсь, мой ответ помог :)

0 голосов
/ 30 мая 2019

Я не знаком с процессом jgitflow, и я постараюсь прочитать об этом и адаптировать свой ответ, но сейчас я хотел бы указать вам на эту действительно замечательную статью о развертывании maven - Maven Плагин релиза: Dead and Buried . В статье рассказывается об использовании внешне установленной версии в их pom-файле - они встраивают свойство «вменяемое по умолчанию» в свою кодовую базу.

    <properties>
        <!-- Sane default when no revision property is passed in from the commandline -->
        <revision>0-SNAPSHOT</revision>
    </properties>

Затем они ссылаются на это свойство в своем <build> описании

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-scm-plugin</artifactId>
                <version>1.9.4</version>
                <configuration>
                    <tag>${project.artifactId}-${project.version}</tag>
                </configuration>
            </plugin>
        </plugins>
    </build>

При вызове maven они передают ему пользовательский параметр со своего CI-сервера - mvn deploy scm:tag -Drevision=$BUILD_NUMBER

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

--- Ответ на отзыв ---

Если вы просто пытаетесь извлечь последнюю часть идентификатора ветви, есть несколько способов сделать это. Если вы просто хотите все после последнего /, вы можете использовать утилиту basename.

$ BRANCH="origin/feature/JIRA-0101"
$ basename $BRANCH
JIRA-0101

Вы могли бы быть более конкретным с регулярным выражением, которое ожидает шаблон стиля ASDF-1234

$ echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g'
JIRA-0101

И если вы хотите записать вышеизложенное в новую переменную, вы можете использовать подоболочку, либо прямо в вызове maven

mvn clean install -Dbranch=$(echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g')

Или сохранить его в промежуточной переменной, которую вы можете проверить, чтобы проверить, имеет ли ненулевая длина

JIRA_ID=$(echo $BRANCH | sed -e 's|.*/\([A-Z]*-[0-9]*\)$|\1|g')
[[ -z "${JIRA_ID}" ]] && echo "Unable to determine JIRA_ID" && exit 1
mvn clean install -Dbranch=${JIRA_ID}

Если вам нужно передать переменную на другой шаг (если непосредственно используется плагин maven), вам понадобится плагин, подобный плагину среды envinject , описанному в этот ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...