Реализация конвейера CI / CD с использованием Jenkins - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь реализовать конвейер CI / CD, используя kubernetes, Jenkins и мой частный репозиторий кода SVN на локальном сервере.Когда я смотрю пример для реализации конвейера, я вижу только то, что использование GitHub - веб-хуков.И запуск с использованием веб-хуков, когда коммит сделан в GitHub репозиторий.В моем сценарии разработки я использую SVN-репозиторий.Итак, в моем предыдущем обсуждении переполнения стека я обнаружил, что добавление одного плагина SVN в Jenkins.Здесь я почувствовал сомнение, что

  1. Вместо использования функции запуска с веб-хуками из GitHub, Что мы можем сделать для использования подключаемого модуля SVN?Есть ли в Jenkins какая-либо конфигурация, в которой говорится, что нужно создавать проект, тестировать и развертывать, когда в репо кода делается коммит?В противном случае мне нужно всегда зависеть от заданий cron от Дженкинса?
  2. Как и в GitHub - веб-хуки. Какое инициирующее действие мы можем настроить в jenkins, когда коммит превращается в репо кода?

1 Ответ

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

На странице плагина Subversion есть несколько хороших примеров использования ловушек post-commit для получения нужного поведения. Чтобы ответить на ваши вопросы, это выглядит так:

  1. Вы можете добавить скрипт в файл post-commit в каталоге $REPOSITORY/hooks (см. Примеры ниже)
  2. Вам необходимо включить опрос SCM для задания Jenkins, но не имеет значения, какой график вы ему предоставляете (вы можете сделать его так редко, как вам нравится, например, ежемесячно или ежегодно). Если вы отключите опрос, хук фиксации не будет запускать сборки Jenkins.

Я собираюсь предоставить их примеры сценариев для предотвращения гниения ссылок; Я действительно только знаком с репозиториями на основе git, поэтому я, вероятно, не смогу оказать большую помощь в этих сценариях.

Во-первых, вот их основной пример, который предполагает, что у вас в Jenkins настроен анонимный доступ на чтение и отключен CSRF (так что это совсем не очень безопасный пример). Это будет добавлено в файл post-commit в каталоге $REPOSITORY/hooks:

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  http://server/subversion/${UUID}/notifyCommit?rev=$REV

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

#!/bin/sh
REPOS="$1"
REV="$2"

# No environment is passed to svn hook scripts; set paths to external tools explicitly:
WGET=/usr/bin/wget
SVNLOOK=/usr/bin/svnlook

# If your server requires authentication, it is recommended that you set up a .netrc file to store your username and password
# Better yet, since Jenkins v. 1.426, use the generated API Token in place of the password
# See https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients
# Since no environment is passed to hook scripts, you need to set $HOME (where your .netrc lives)
# By convention, this should be the home dir of whichever user is running the svn process (i.e. apache)
HOME=/var/www/

UUID=`$SVNLOOK uuid $REPOS`
NOTIFY_URL="subversion/${UUID}/notifyCommit?rev=${REV}"
CRUMB_ISSUER_URL='crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'

function notifyCI {
    # URL to Hudson/Jenkins server application (with protocol, hostname, port and deployment descriptor if needed)
    CISERVER=$1

    # Check if "[X] Prevent Cross Site Request Forgery exploits" is activated
    # so we can present a valid crumb or a proper header
    HEADER="Content-Type:text/plain;charset=UTF-8"
    CRUMB=`$WGET --auth-no-challenge --output-document - ${CISERVER}/${CRUMB_ISSUER_URL}`
    if [ "$CRUMB" != "" ]; then HEADER=$CRUMB; fi

    $WGET \
        --auth-no-challenge \
        --header $HEADER \
        --post-data "`$SVNLOOK changed --revision $REV $REPOS`" \
        --output-document "-"\
        --timeout=2 \
        ${CISERVER}/${NOTIFY_URL}
}

# The code above was placed in a function so you can easily notify multiple Jenkins/Hudson servers:
notifyCI "http://myPC.company.local:8080"
notifyCI "http://jenkins.company.com:8080/jenkins"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...