Вот элегантное решение, которое не импортирует переменные Make, но задает любые экспорты среды для подпроцессов оболочки. Лично я предпочитаю, чтобы мои профили были динамическими скриптами.
export BASH_ENV=tools/sh/env.sh
Есть некоторые подводные камни. К сожалению, ENV не работает, я думаю, он должен (, но это проблема Bash, а не Make ). Кроме того, действительно требуется еще одна строка, потому что интерпретатор оболочки Make по умолчанию — /bin/sh.
BASH_ENV := tools/sh/env.sh
SHELL := /usr/bin/bash
На стороне up -это также позволяет включать функции оболочки в сценарии Makefile, но только для сценариев рецептов. Я не знаю, как поживают другие оболочки, кроме Bash. И еще кое-что происходит. Я поместил тестовый файл как GIST .
Можно вообразить множество сложных сценариев оболочки. Мне больше всего нравится этот Q/A за простые ответы.
Из предоставленного вывода ваша конкретная проблема заключается в том, что пакеты, которые вы хотите установить, зависят от libsystemd-journal0
, и у вас нет настроенных репозиториев, которые предоставляют этот пакет. Похоже, внутри этого контейнера у вас есть смесь репозиториев Debian и Ubuntu, и это, вероятно, является источником вашей проблемы.
Из того, что я могу расшифровать, образ Docker, который вы используете, — это даже не Ubuntu, он работает на Debian Stretch, поэтому вам не следует устанавливать репозиторий Ubuntu Docker внутри этого контейнера.
После создания контейнера с помощью репозитория Docker для Debian Stretch он должен быть собран.
Другая ваша проблема заключается в том, что вы пытаетесь запустить Docker внутри Docker, который, как вы обнаружите, имеет некоторые свои проблемы/ограничения, но вы, вероятно, доберетесь до этого после сборки контейнера и, вероятно, его следует отправить как дополнительный вопрос.
Что касается рекомендуемого образа Jenkins Docker, ссылка из образа, который вы сейчас используете , привела меня к этому образу , который также работает openjdk-8
в Debian Stretch.