Я настраиваю сервер непрерывного развертывания, используя TFS 2018 на месте.Исходный код проекта размещен на другом сервере Git, доступном по SSH или HTTPS.Я собираюсь использовать TFS только для автоматизации новых сборок / развертываний с использованием опроса Git TFS.
У меня есть два агента, один в Windows и один в Linux.Агент Linux работает как контейнер Docker.Я использую агент Windows для создания кода ASP.NET, и он отлично работает с использованием аутентификации HTTPS.Сейчас я пытаюсь настроить сборку для агента Linux, который получает код JavaScript и собирает его.Проблема заключается в том, что агент Linux не может получить код.
При попытке использовать HTTPS с использованием точно таких же учетных данных, с которыми работает агент Windows, я получаю «ошибка аутентификации»:
2018-12-19T15:43:57.0878068Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
2018-12-19T15:43:57.0883732Z fatal: Authentication failed for 'https://***:***@<redacted>/'
2018-12-19T15:43:57.0936665Z ##[warning]Git fetch failed with exit code 128, back off 2.956 seconds before retry.
Я решил попробовать использовать SSH для получения источников.Я сгенерировал пару закрытых / открытых ключей SSH и добавил открытый ключ в свою учетную запись на удаленном сервере Git.Однако я не могу настроить задачу TFS Git «Получить источники» для использования SSH с использованием аутентификации по секретному ключу.Для этого в конфигурации службы Git нет опции, только для предоставления пары пользователь / пароль.Попытка просто вставить закрытый ключ в поле пароля дает следующее:
2018-12-19T15:49:46.2303693Z ##[command]git remote set-url origin ssh://emptyusername:***@<redacted>
2018-12-19T15:49:46.2312696Z ##[command]git remote set-url --push origin ssh://emptyusername:***@<redacted>
2018-12-19T15:49:46.2315992Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
2018-12-19T15:49:46.2318791Z ssh: Could not resolve hostname emptyusername:-----begin rsa private key----- miieowibaakcaqeav7dgukagzcpr: Name or service not known
2018-12-19T15:49:46.2319131Z fatal: Could not read from remote repository.
Создание службы SSH в диспетчере служб в TFS не работает, так как я считаю, что длязапуск удаленных команд через SSH, а не для получения исходного кода.(Служба, добавленная таким образом, вообще не отображается в конфигурации сборки, поэтому ее нельзя выбрать.)
Я нашел документацию, указывающую, что вы можете использовать PAT (персональный доступ).токен) в качестве имени пользователя для запроса HTTPS.Итак, я попробовал это сделать, но получил тот же результат, что и при попытке использовать мои действительные учетные данные:
2018-12-19T15:57:45.3279943Z ##[command]git fetch --tags --prune --progress --no-recurse-submodules origin
2018-12-19T15:57:45.3281813Z fatal: Authentication failed for 'https://voy2wog...@<redacted>'
2018-12-19T15:57:45.3341431Z ##[warning]Git fetch failed with exit code 128, back off 4.71 seconds before retry.
Итак, подведем итог:
- HTTPS-аутентификация на главном сервере Git от агента Windows работает нормально.
- HTTPS-аутентификация на Git от агента Linux всегда кажется неудачной.
- SSH-аутентификация на Git либо невозможна, либо нетОчевидно, как настроить в TFS.
Как я могу решить одну из этих двух проблем, чтобы настроить непрерывную сборку?
Мне нужно извлекать данные непосредственно из репозитория Git, чтобы я мог использовать функцию опроса для автоматического построения при каждом нажатии на заданные ветви.Другими словами, упаковка исходных текстов и подача их в TFS каким-либо иным способом нецелесообразна.
Сейчас я пытаюсь добавить необходимые инструменты в мой агент Windows, но в конечном итоге я хотел бы развернуть больше агентови агенты Linux предпочтительнее, особенно когда мы начинаем переходить на .NET Core и не должны зависеть от Windows для сборки.(Стоимость лицензирования Windows и все)