Кейс: для сборки проекта нужен ОЧЕНЬ секретный .env файл (sarcasm). Как его получить на этапе сборки так, чтобы в итоговом образе он не появился? Немного контекста:

  • Приложение на symfony
  • CI/CD в виде drone.io `steps:
  • name: build image: plugins/docker environment: SSH_HOST: from_secret: ssh_host SSH_KEY: from_secret: ssh_key settings: build_args_from_env:
  • SSH_HOST
  • SSH_KEY В качестве build_args пробрасываем наши секретики. Важный (и зело радующий нюанс) - во всех текстовых логах сборки все секреты заменяются на звездочки (*). `ARG SSH_HOST ARG SSH_KEY

RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan "${SSH_HOST}" >> ~/.ssh/known_hosts && echo "${SSH_KEY}" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa && scp "${SSH_HOST}:/very/secret/.env.local" .env.local && composer i --ignore-platform-reqs --no-dev --optimize-autoloader --classmap-authoritative && bin/console cache:clear && rm .env.local А вот так в контейнере настраиваем себе ssh окружение, скачиваем файл, собираем чего надо, удаляем файл. Важно: эти команды должны быть в пределах одного RUN, иначе будет создан промежуточный слой, где наш СЕКРЕТНЫЙ файл будет храниться.

https://docs.docker.com/reference/cli/docker/buildx/build/#ssh У buildx есть даже специальный флаг, позволяющий делать вот такие фокусы: `# syntax=docker/dockerfile:1 FROM alpine RUN apk add --no-cache openssh-client RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts RUN --mount=type=ssh ssh -q -T git@gitlab.com 2>&1 | tee /hello

#"Welcome to GitLab, @GITLAB_USERNAME_ASSOCIATED_WITH_SSHKEY" should be printed here #with the type of build progress is defined as plain.

Но мне как-то лень перенастраивать drone runner на buildx :D```