ДД. Заранее скажу, что может не тот инструмент выбрал, но пока хочется обойтись тем что уже используем.
Сделал для деплоя такую вещь на Gulp:
'use strict';
var gulp = require('gulp'),
// ...
fs = require('fs'),
expandTilde = require('expand-tilde'),
GulpSSH = require('gulp-ssh'),
config = require('./gulp-config.json');
//...
// deploy
var gulpSSH = new GulpSSH({
ignoreErrors: false,
sshConfig: {
host: 'host',
port: 'port',
username: 'username',
privateKey: fs.readFileSync(expandTilde('~/.ssh/id_rsa')),
passphrase: config.ssh.passphrase
}
});
gulp.task('deploy', function () {
return gulpSSH
.shell([
// пробелы перед командами, чтоб в историю не записывал на сервере
' cd /var/www/webiste',
' git pull https://' + config.git.username + ':' + config.git.password + '@bitbucket.org/username/project.git',
' composer install --prefer-dist --no-scripts --quiet',
' composer dump-autoload --optimize --no-dev --quiet',
// ' php yii migrate', // todo: test!
' npm install',
' npm run prod'
], {filePath: 'deploy.log'})
.pipe(gulp.dest('./gulp'))
});
./gulp-config.json
{
"ssh": {
"passphrase": "Пароль от ssh ключа"
},
"git": {
"username": "Логин битбакета",
"password": "Пароль битбакета"
}
}
По сути все работает, но светит в окне и в логах пароли.
1. Проблема в пароле от ssh ключа (passphrase), все перепробовал, но без него не хочет работать как минимум под MacOS, кидает ошибку:
"Error: Encrypted private key detected, but no passphrase given"
да, файл gulp-config.json в игноре и не отправляю в репу, но все равно хранить пароль в открытом виде?
2. Логин и пароль от центральной репы.
Можно конечно для сервера сделать ключ и по нему тянуть с битбакета, но удобнее оставить все на связке логина и пароля. Тут вижу два пути:
- как-то передать запрос git'а логина и пароля юзеру, а он уже укажет сам (сейчас все указывают свои)
- как-то может настроить "ForwardAgent yes" для SSH, чтоб можно было на боевом/тестовом сервер использовать, а потом ключ как-то передать git . т.е. git pull на сервере будет использовать ключ юзера который авторизовался и запустил команду.
Если будут еще какие-то идеи, замечания по коду, то буду рад выслушать.
Заранее спасибо.