В настоящее время мы сталкиваемся с проблемой, когда пытаемся создать проект 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
Кажется, что информация о дополнительных заголовках игнорируется.