TFS: git клонировать частный репозиторий через Composer не удается - PullRequest
0 голосов
/ 18 марта 2020

В настоящее время мы сталкиваемся с проблемой, когда пытаемся создать проект PHP, для которого требуются внутренние Composer пакеты, размещенные на нашей собственной TFS on-premis e репозитории на выделенном компьютере сборки через конвейер сборки TFS.

В нашем файле composer. json упоминаются как внешние, так и внутренние пакеты. Итак, у нас есть что-то вроде этого:

{
    "repositories": [
    { 
      "type": "composer", 
      "url": "https://composer.typo3.org/" 
    },
    { 
        "type": "git", 
        "url": "https://servername/tfs/organisation/project/_git/repository" 
    },
    "require": {
        ...
    }
}

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

export http_proxy="http://proxy-url"
export https_proxy="http://proxy-url"

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

Итак, с нашими личными пакетами Composer просто сделает ...

git clone --mirror 'https://service_account:password@servername/tfs/organisation/project/_git/repository'

К сожалению, мы всегда получаем следующую ошибку:

fatal: Authentication failed for 'https://service_account:password@servername/tfs/organisation/project/_git/repository'

Мы попробовали несколько вещей:

Используемая учетная запись службы имеет все разрешения для соответствующих частных репозиториев и используется для агента сборки на компьютере е с необходимыми разрешениями. Соединения между нашим TFS сервером и машиной сборки открыты. Мы можем сделать ping tfs.server или telnet tfs.server 443 без каких-либо ошибок. Шаг « Получить исходные коды » также отлично работает при запуске процесса сборки. Команда git clone 'https://username:password@servername/tfs/organisation/project/_git/repository' работает повсюду.

Может кто-нибудь дать нам небольшую помощь в этом или просто небольшую подсказку? Это будет высоко ценится. Кто-нибудь сталкивался с такой проблемой или поведением?

Заранее большое спасибо.

С уважением,

EDIT 1, следуя ответу PatrickLu-MSFT

Следующий пост, Azure Конвейеры: я становлюсь фатальным: не могу прочитать имя пользователя для 'https://github.com': терминальные запросы отключены , заставили нас просто поставить галочку "Разрешить скрипты для получить доступ к опции «OAuth-токен». Итак, мы попытались сделать это примерно так:

  • git клон --bare https://service_account: $ (System.AccessToken) @ имя_сервера / tfs / organization / project / _git / repository
  • git клон --bare https: // $ (System.AccessToken) @ имя_сервера / tfs / organization / project / _git / repository
  • git клон - bare https://$env:SYSTEM_ACCESSTOKEN@servername/tfs/organisation/project/_git/repository

... но это не сработало.

Мы также попробовали следующее:

git config http.extraheader "AUTHORIZATION: bearer $(System.AccessToken)"

или

git config http.https://servername/tfs/organisation/project/_git/repository.extraheader "AUTHORIZATION: bearer $(System.AccessToken)"

затем

git clone https://servername/tfs/organisation/project/_git/repository

... безуспешно. Но если мы просто сделаем это из командной строки или получим доступ к этим URL-адресам из браузера, у нас не возникнет никаких проблем.

Однако, если мы сделаем что-то подобное

git config http.extraheader "AUTHORIZATION: bearer $(System.AccessToken)" clone https://servername/tfs/organisation/project/_git/repository

. .. мы получаем что-то вроде "repository.git" только с содержимым папки Git, а не с самим пакетом.

РЕДАКТИРОВАТЬ 2

После многих хорошо проведя часы, полные радости, нам наконец-то удалось получить что-то вроде этого:

REPO_URL=https://servername/tfs/organisation/project/_git/repository
EXTRAHEADER="AUTHORIZATION: bearer $(System.AccessToken)"
git -c http.extraheader="$EXTRAHEADER" clone $REPO_URL

Мы должны сделать это для каждого частного пакета, но, похоже, это делает свою работу. Но для этого, чтобы быть чистым, у нас должно быть два composer.json файла: один для локальной разработки, а другой для конвейера сборки, который не содержит приватных пакетов.

Что также интересно, заключается в том, что следующее не работает:

git config credential.https://servername/tfs/organisation.integrated true
git config credential.helper store
git config http.$REPO_URL.extraheader "$EXTRAHEADER"

git clone https://servername/tfs/organisation/project/_git/repository
# OR
composer require vendor/package-name

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

1 Ответ

0 голосов
/ 19 марта 2020

Попробуйте изменить порядок репозиториев, чтобы репозиторий git был указан перед typo3, как показано ниже:

{
    "repositories": [
     { 
        "type": "git", 
        "url": "https://domain/tfs/organisation/project/repository" 
    },
    { 
      "type": "composer", 
      "url": "https://composer.typo3.org/" 
    },

    "require": {
        ...
    }
}

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

Мы рекомендуем всегда отключать аутентификацию IIS Basi c при использовании Azure DevOps Server. Только при необходимости следует включить проверку подлинности IIS Basi c. Когда на вашем компьютере windows включена аутентификация IIS Basi c, он не позволяет использовать персональные маркеры доступа (PAT) в качестве механизма аутентификации.

Ссылка на источник

И для URL-адреса клона в TFS, должно быть, как показано ниже:

git clone https://PAT@tfsservername:8080/tfs/Collectionname/Projectname/_git/GitReponame

Если это не работает, так как вы находитесь за прокси , Попробуйте временно отключить прокси при использовании в исходном браузере.

Это поможет сузить круг вопросов, связанных с прокси-сервером.

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