Если ваше приложение взаимодействует с какими-либо сторонними API-интерфейсами, вероятно, потребуется использовать некоторую информацию для идентификации, например идентификаторы, ключи API или секреты клиента. Вашему приложению они нужны для правильной работы, но вы определенно не хотите регистрировать их в своем репо, особенно если ваше репо является общедоступным.
Итак, что вы можете сделать, если у вас есть бессерверное клиентское приложение и ваше публичное репозиторий git, ваш CI-сервер и ваш хост — все то же самое, что и при использовании Gitlab Pages? Чтобы обойти эту проблему, вот способ настроить Gitlab и webpack так, чтобы он использовал переменные из локального файла во время разработки, а секретные переменные Gitlab во время сборки CI.
Локальный файл конфигурации
Добавьте файл config.js и добавьте к нему секреты:
module.exports = { CLIENT_ID: "<YOUR_CLIENT_ID>", CLIENT_SECRET: "<YOUR_CLIENT_SECRET" }
Добавьте это в свой файл .gitignore, чтобы не регистрировать его. Обратите внимание: вам нужно будет сообщить всем соавторам, что им также потребуется воссоздать файл локально.
Секреты Gitlab
Теперь вам нужно добавить те же значения в секретные переменные вашего проекта на Gitlab.
Нажмите «Настройки» в левом меню и выберите «CI / CD».
В настройках CI / CD разверните Секретные переменные и добавьте значения из файла config.js. Это сделает эти переменные доступными во время сборки в Gitlab CI. Подробнее о секретных переменных здесь.
Настроить Gitlab CI
Если вы еще не настроили это, вам нужно будет добавить файл .gitlab-ci.yml в свое репо, чтобы Gitlab CI собрал и развернул ваше приложение. Подробнее об этом здесь, если вы не делали этого раньше, но, вероятно, это будет выглядеть примерно так:
image: node:9.10 cache: paths: - node_modules/ pages: script: - npm install - npm run prod - mv dist public artifacts: paths: - public only: - master
Настроить webpack
Теперь мы готовы настроить webpack, чтобы получать его секреты из нужного места, в зависимости от того, где он запущен. Для этого полезно знать, что Gitlab устанавливает ряд переменных среды (полный список здесь) в своей среде сборки, чтобы мы могли использовать их наличие, чтобы понять, что происходит.
В webpack.config.js:
// Indicates we're building in the CI environment const isCiBuild = !!process.env.CI; let clientId; let clientSecret; if(isCiBuild) { clientId = process.env.CLIENT_ID; clientSecret = process.env.CLIENT_SECRET; } else { const config = require("./config"); clientId = config.clientId; clientSecret = config.clientSecret; } // webpack config stuff... plugins: [ // other plugins... new webpack.DefinePlugin({ CLIENT_ID: JSON.stringify(clientId), CLIENT_SECRET: JSON.stringify(clientSecret) }) ]
Теперь везде в вашем приложении у вас будет доступ к переменным CLIENT_ID и CLIENT_SECRET, и вы сможете передавать их в любые вызовы настройки API, для которых они необходимы.