#docker #kubernetes #postman #args #newman
#docker #kubernetes #почтальон #аргументы #ньюман
Вопрос:
Я хочу использовать Kubernetes и postman/newman
образ Docker для выполнения моих тестов API.
Локально я могу выполнить изображение с помощью
docker запускает postman/newman запуск <url-to-collection> —env-var baseUrl=<local-hostname>
Я включаю изображение в файл манифеста Kubernetes
spec:
containers:
- name: newman
image: postman/newman:latest
args:
- run
- '<url-to-collection>'
- --env-var baseUrl=<kubernetes-hostname>
Когда я применяю манифест и просматриваю журналы контейнера, я получаю следующую ошибку:
error: unknown option '--global-var baseUrl=<kubernetes-hostname>'
Я пробовал много вещей с кавычками и использованием command
раздела вместо args
раздела, но всегда с тем же результатом. Я полагаю, что Kubernetes каким-то образом создает команду таким образом, что newman
исполняемый файл не может ее понять. Однако я не смог найти никакой информации об этом.
(Я также создал проблему в репозитории Newman на GitHub здесь)
Может ли кто-нибудь объяснить мне, откуда эта проблема и как я могу ее решить?
В любом случае спасибо!
Ответ №1:
Команды Linux состоят из последовательности слов. Если вы вводите команду в командной строке, она берет на себя ответственность за разбиение ее на слова для вас, но в списке Kubernetes args:
вам нужно разделить слова самостоятельно.
args:
- run
- '<url-to-collection>'
# You want these as two separate arguments, so they need to be
# two separate list items
- --env-var
- baseUrl=<kubernetes-hostname>
Если два аргумента находятся в одном элементе списка, они представляют собой одно «слово»:
# /bin/ls "/app/some directory/some file"
command:
- /bin/ls
# a single argument, including embedded spaces
- /app/some directory/some file
Те же основные правила применяются для Docker Compose entrypoint:
и command:
для файла и директив Dockerfile и JSON-синтаксиса ENTRYPOINT
CMD
, за исключением того, что все собственные формы Docker также принимают простую строку, которую они будут разбивать на пробелы (используя оболочку в случае Dockerfile, но не в случае Compose ).
В docker run
предоставленной вами команде оболочка вашей хост-системы сначала обрабатывает ее, поэтому --env-var
параметр и baseUrl=...
аргумент разделяются на отдельные слова, прежде чем они будут переданы в контейнер.
Комментарии:
1. Спасибо за объяснение, это действительно решило проблему. Мне также пришлось удалить кавычки вокруг URL-адреса, которые требуются при запуске команды из командной оболочки. Теперь это работает как шарм.