Есть ли способ получить общий файл netlify.toml для одного репозитория и нескольких сайтов? - PullRequest
0 голосов
/ 13 января 2019

Я ищу способ определения двух сборок сайтов на netlify, полученных из одного репозитория, используя один общий netlify.toml. Возможно ли это сделать?

У меня есть репозиторий GitHub с именем hugo-dream-plus , для которого я настроил две сборки веб-сайтов на netlify, а именно dream-plus-posts и dream-plus-cards. Обе эти сборки используют одни и те же переменные среды и в основном все конфигурации, кроме команд сборки:

hugo --config cards.toml     #For dream-plus-cards
hugo --config posts.toml     #For dream-plus-posts

Мне было интересно, есть ли способ для меня создать общий файл netlify.toml, поскольку репо одинаково для обеих сборок, для обоих этих сайтов.

Я уже использовал веб-интерфейс для настройки каждой сборки в отдельности, но модифицировать каждую из них довольно утомительно, поэтому я предпочитаю приведенный выше сценарий.

Я планирую сделать так, чтобы все конфигурации были общими для двух сборок, кроме команды сборки, которая будет определена отдельно, как показано выше.

1 Ответ

0 голосов
/ 13 января 2019

На момент получения этого ответа Netlify не поддерживает способ изменения значений в netlify.toml, поскольку он считывается перед вашей сборкой. За исключением заголовков и перенаправлений, которые позволяют изменять при сборке.

Использование переменных среды непосредственно в качестве значений ($ VARIABLENAME) в файле netlify.toml не поддерживается.

Однако

Вы можете запустить команду сценария и изменить ее в зависимости от домена или переменной среды. Есть несколько настроек, которые будут работать.

Вот как я могу выполнить то, что вы хотите, основываясь на доменном имени.

netlify.toml

[build]
  command = "node ./scripts/custom.js"
  publish = "public"

scripts/custom.js

const exec = require('child_process').exec;
const site = process.env.URL || "https://example.com";
const domain = site.split('/')[site.split('/').length - 1];

let buildCommand;
switch(domain) {
  case "dream-plus-posts.netlify.com":
    buildCommand = 'hugo --config posts.toml';
    break;
  case "dream-plus-cards.netlify.com":
    buildCommand = 'hugo --config cards.toml';
    break;
  default:
    throw `Domain ${domain} is invalid`;
}

async function execute(command){
  return await exec(command, function(error, stdout, stderr){
    if (error) {
      throw error;
    }
    console.log(`site: ${site}`);
    console.log(`domain: ${domain}`);
    console.log(stdout);
  });
};

execute(buildCommand);

На заметку:

  • Я не проверял стандартный вывод в журнал, используя этот метод с Хьюго. Дочерний процесс захватывает выходные данные и возвращает их в стандартный вывод.
  • Мы не хотим регистрировать ошибки, потому что мы хотим, чтобы наша сборка не работала на ошибках, поэтому это приведет к коду выхода, отличному от 0
  • Вы можете встроить другие команды с помощью этого решения (то есть "node ./scripts/custom.js && некоторые другие команды перед развертыванием")
  • Вы также можете просто проверить заданную вами переменную среды, а не имя домена
...