Амир выключен
Этот пост это продолжение моего предыдущего Расширенная веб-разработка и рабочий процесс развертывания руководство. В этом уроке я показал, как я автоматизировал свое рабочее значение для разработки и развертывания. Многие изменились с тех пор благодаря быстрому развитию веб-инструментов и технологий – и, конечно же, из-за моей необходимости улучшить мой рабочий процесс в качестве веб-разработчика.
Мое место использования
Я использую общий хостинг-сервис для моего личного портфолио Сайт И большая часть кода состоит из интерфейсных статических активов:
В прошлое Мне пришлось запустить задачу Gulp.js, чтобы министвовать, Ulify и обрабатывать все исходный код. Он выводит его в папке пакета вместе с файлом index.html, который готов к развернутую на мою услугу хостинга через FTP.
Чтобы автоматизировать процесс, я использовал DeployBot Отказ Это услуга, которая позволяет использовать ваши существующие репозитории и развертывание в ряде мест, такие как FTP, SFTP, Amazon и т. Д.
Там, где DeployBot падает для меня, это то, что он работает только как туннель, который разворачивает мой репозиторий GitHub, когда изменение было привержено для хранилища. Это означало, что это потребует от меня загрузки моего подключенного кода в отдельную ветку – я назвал это «развертывание» в моем случае – и он загрузил все файлы из этой ветви к серверу хостинга через FTP.
Я видел это как плохую практику и временное решение для комфорта. Мой код на GitHub должен быть «исходным» кодом, а не куча оборудованных и UGLified JavaScript и CSS и другие обработанные файлы.
Решение
Чтобы устранить проблему, которую я имел с DeployBot, мне пришлось бросить его для Travis CI – непрерывной интеграции и услуги доставки, которая интегрируется с GitHub. Таким образом, я смог удалить филиал «Развертывание», которую у меня был в моем репозитории, и позволит Travis CI сделать всю работу за выполнение задач Gulp.js для меня и дальше развертывающую его к моему хостингу через FTP. Все, что мне нужно было сделать, это толкать мой исходный код, а Travis CI сделает все остальное. Больше Нет больше запуска задач GULP.JS вручную, затем проверяя ветку «Развертывание» и нажав на него вручную в GitHub.
В приведенном ниже кода я определяю файл сценария « .travis.yml », который требуется для TRAVIS CI для запуска:
// Setting environment language language: node_js // Using the lastest version of Node.js node_js: - node // Script to install dependencies before_script: - npm install -g --silent // The actual build script for Gulp.js script: - gulp build --prod // Deploying to hosting server via FTP after_script: - gulp deploy --user $FTP_USER --password $FTP_PASSWORD
💡 В строке 18 учетные данные FTP извлечены из TRUVIS CI
Это отличная функция, поскольку она позволяет мне установить защищенные переменные среды, учетные данные FTP входа в систему ” $ ftp_user ” и ” $ ftp_password ” В этом случае. Эти переменные зашифрованы и встроены в файл сценария « .travis.yml » во время выполнения. Таким образом, я могу зафиксировать свой исходный код в Github, не подвергая какие-либо конфиденциальные данные.
Для них на работу мне пришлось использовать пакет под названием Винил-ftp Отказ Это описано как,
const ftp = require('vinyl-ftp');
const minimist = require('minimist');
const args = minimist(process.argv.slice(2));
gulp.task('deploy', () => {
const remotePath = '/amiroffme/';
const conn = ftp.create({
host: 'ftp.amiroff.me',
user: args.user,
password: args.password
});
console.log('FTP connection successful!');
gulp.src('build/**/*.*')
.pipe(conn.dest(remotePath));
});💡 В строке 9 и 10 задача развертывания анализирует пользователь и пароль из параметров аргумента, которые управляет сценарием CI TRAVIS CI :
$ gulp deploy --user $FTP_USER --password $FTP_PASSWORD
Я должен был установить еще один популярный пакет NPM под названием Минимист Чтобы выбрать аргументы «Пользователь» и «Пароль», как в CLI выше.
В дополнение к установке предыдущих двух пакетов NPM, мне пришлось решить файл файла задач Gulp.js, чтобы позволить мне запустить сборку разработки, чтобы я мог работать на локальном порядке. Непрерывное развертывание производства великолепно, но я все еще хотел иметь возможность запустить свой код локально и по-прежнему иметь настоящую среду разработки с фактической сборкой разработки. 😊
// Main build task
gulp.task('build', ['html', 'images', 'sass', 'js', (args.prod ? 'production' : 'development')], () => {
// Print build info
console.log(packageFile.name + ' "' + packageFile.description + '" v' + packageFile.version);
});
// Runs only for production build
gulp.task('production', () => {
console.log('This is a production build');
console.log('Please run the following script for deployment:');
console.log('gulp deploy --user $FTP_USER --password $FTP_PASSWORD');
});
// Runs only for development build
gulp.task('development', () => {
browsersync(browserSyncConfig);
console.log('This is a development build');
console.log('File changes will be watched and trigger a page reload');
gulp.watch(html.watch, ['html', browsersync.reload]);
gulp.watch(images.src, ['images', browsersync.reload]);
gulp.watch(css.watch, ['sass', browsersync.reload]);
gulp.watch(js.src, ['js', browsersync.reload]);
});💡 В строке 2 я проверяю аргументы на сборку, затем выполните задачу сборки соответствующим образом.
Если задача обнаруживает аргумент « Prod » в сценарии сборки TRAVIS CI:
$ gulp build --prod
Он пропускает Развитие Задача, предназначенная для местного развития, создает и запускает Производство задача вместо этого.
Выполнение строительства без аргумента « Prod » будет вызвать Развитие Задача, которая смотрит на файл изменения и перезагружает страницу, очень похоже на любую среду разработки.
$ gulp build
Заключение
Больше не переключение между ветвями и копированием вручную и нажимает в комплектных активах в GitHub. Я могу просто работать на местном уровне и толчок в GitHub, и Travis CI заботится о остальных.
Я надеюсь, что вам понравилось читать! Пожалуйста Следуйте за и Поделиться Для более технических вещей 🤖 💖
Оригинал: “https://www.freecodecamp.org/news/advanced-automatic-deployment-with-travis-ci-1da32f7930ce/”