Как с помощью Google Cloud Build запустить Makefile, который выполняет команды docker и kubectrl?

Я получил проект, в котором используется несколько Makefile, которые запускают несколько docker команд. Я хочу построить его на Cloud Build.

Я знаю, что Cloud Build изначально обрабатывает Docker, но должен работать с существующей структурой Makefile.

Я попробовал make Custom Build step , но Cloud Build завершился неудачно из-за отсутствия docker и kubectl. Так что я мог бы добавить их к Dockerfile шага make Custom Build, но похоже, что это неправильно, потому что тогда make запускает Docker-in-Docker, и это вызывает проблемы. - например, отсутствуют права доступа gcloud и kubectl и контекст.

В качестве небольшой части одного из таких Makefile, вот цель, которая вызывает docker buildz anddocker push`.

build/myapp/deployer: ...

    docker build \
        --build-arg REGISTRY="$(REGISTRY)/myapp" \
        --tag "$(APP_DEPLOYER_IMAGE)" \
        -f deployer/Dockerfile \
        .

    docker push "$(APP_DEPLOYER_IMAGE)"
    @touch "$@"

Как запустить эти Make-файлы в Cloud Build?


person Joshua Fox    schedule 27.11.2019    source источник
comment
Можете ли вы предоставить пример кода этого make-файла?   -  person guillaume blaquiere    schedule 27.11.2019
comment
Я добавил небольшой образец.   -  person Joshua Fox    schedule 27.11.2019
comment
Хорошо, ваш make-файл - это просто сценарий bash, не так ли?   -  person guillaume blaquiere    schedule 28.11.2019
comment
Правильно, make просто запускает некоторые команды, в основном docker build и docker push. Однако make имеет сложную структуру зависимостей, поэтому я бы предпочел оставить ее   -  person Joshua Fox    schedule 28.11.2019
comment
И вы создали собственный конструктор с Docker Gcloud и kubectl?   -  person guillaume blaquiere    schedule 28.11.2019
comment
да. Я создал такой образ, хотя не уверен, что это правильный путь. Фактически, даже в базовом образе Cloud Build есть make и docker   -  person Joshua Fox    schedule 28.11.2019
comment
Базовый образ Cloud Builder создан для одной конкретной задачи. Вы хотите создать или продвинуть с помощью docker, используйте образ докера, хотите использовать gcloud, образ un gcloud, то же самое с kubectl, ... Вы либо взорвите свой make, либо используете его с изображением do it all.   -  person guillaume blaquiere    schedule 28.11.2019
comment
Более глубокий вопрос - как запустить докер внутри контейнера докера. Это выполнимо, и на самом деле образ для построения докеров Cloud Build по умолчанию делает это, но может быть проблематичным, как в приведенном здесь примере процесса «make».   -  person Joshua Fox    schedule 29.11.2019


Ответы (1)


Чтобы ответить на ваш комментарий: «Как запустить докер внутри контейнера докера?», Вы должны увидеть свой собственный облачный конструктор как бегун. Вы можете использовать это так в Cloud Build

- steps:
  - name: gcr.io/your-project/your-custom-builder
    entrypoint: "bash"
    args: 
      - "-c"
      - |
        Makefile
        <All the script lines that you want which use binaries installed in your custom builder>

Здесь настраиваемый Cloud Builder выполняет команду, но результат сохраняется в вашей рабочей области Cloud Build, а не в настраиваемом контейнере Cloud Builder.

person guillaume blaquiere    schedule 29.11.2019
comment
Docker-in-docker все усложняет. Например, docker / kubectl не настроен заранее с подходящим пользователем службы. Кроме того, они сталкиваются с проблемами доступа к файловой системе. - person Joshua Fox; 30.11.2019
comment
guillaume blaquiere: Возможно, это лучший вопрос: как мы можем использовать параметры, вычисленные в процессе сборки облака: stackoverflow.com/questions/59118037/ h - person Joshua Fox; 30.11.2019