Лучшее решение для развертывания (копирования) последней версии на сервер с использованием Jenkins Pipline - PullRequest
0 голосов
/ 19 сентября 2018

Вот мой конвейер Jenkins:

pipeline {
    agent {
        docker {
            image 'node:6-alpine' 
            args '-p 3000:3000' 
        }
    }
    environment { 
        CI = 'true'
    }
    stages {
        stage('Build') { 
            steps {
                sh 'npm install'
                sh 'npm build'
            }
        }
        stage('Deliver') { 
            steps {
                sh './jenkins/scripts/deliver.sh' 
                input message: 'Finished using the web site? (Click "Proceed" to continue)' 
                sh './jenkins/scripts/kill.sh'
            }
        }
        stage('Deploy') { 
            steps {
                sh './jenkins/scripts/deploy.sh'
            }
        }
    } }

Я использую Docker и jenkinsci/blueocean образ для запуска Jenkins.Первые два этапа являются стандартными для создания приложения NodeJS, однако третий этап - это та часть, в которой я хочу, чтобы Дженкинс скопировал новые файлы на сервер.Вот файлы deploy.sh:

#!/usr/bin/env sh
set -x
scp -o StrictHostKeyChecking=no -r dist/* deviceappstore:/var/www/my_website/static/

Есть две проблемы: первая jenkinsci/blueocean не имеет scp (не настроена) и вторая, ~/.ssh/config не существует внутри джанкинцевобраз докера, тогда SCP не сможет аутентифицироваться.Мое решение состояло в том, чтобы создать собственный образ, расширяющийся от jenkinsci/blueocean, настроить SCP и скопировать в него файл конфигурации и ключ SSH.

Есть некоторые плагины, такие как Publish Over SSH , но кажется, что этобесполезно для трубопроводных проектов.

Есть ли лучшее решение?Это весь сценарий правильно или я что-то не так делаю?Я ищу наиболее безопасное и стандартное решение этой проблемы.

1 Ответ

0 голосов
/ 21 сентября 2018

ОК, думаю, я нашел хорошее решение.Благодаря плагину SSH Agent я могу легко передать учетные данные команде SCP и скопировать файлы на сервер.Примерно так:

...

stage('Deploy') { 
    steps {
        sshagent(['my SSH']) {
            echo 'this works...'
            sh 'scp -o StrictHostKeyChecking=no -r dist/* my_server:/var/www/my_site/static/'
        }
    }
}

...

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

И чтобы иметь возможность использовать это, есть простоодно решениеВам нужно использовать apk внутри jenkinsci/blueocean (альпийского) изображения и настроить openssh:

apk add openssh

Или лучшее решение создать новый Dockerfile и создать свою собственную версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...