diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..501d3a5 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,74 @@ +pipeline { + agent { + label 'ubuntu' + } + + environment { + NODE_ENV = 'production' + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Setup Node.js') { + steps { + nodejs(nodeJSInstallationName: 'Node23') { + sh 'node -v' + sh 'yarn -v' + } + } + } + + stage('Install Dependencies') { + steps { + nodejs(nodeJSInstallationName: 'Node23') { + sh 'yarn install --frozen-lockfile --production=false' + } + } + } + + stage('Deploy via SSH') { + steps { + sshPublisher(publishers: [ + sshPublisherDesc( + configName: 'farmcontrol.tombutcher.local', + transfers: [ + sshTransfer( + cleanRemote: false, + excludes: 'node_modules/**', + execCommand: ''' + cd /opt/farmcontrol-ws + yarn install --production + pm2 restart ecosystem.config.js --env production || pm2 start ecosystem.config.js --env production + ''', + execTimeout: 120000, + flatten: false, + makeEmptyDirs: false, + noDefaultExcludes: false, + patternSeparator: '[, ]+', + remoteDirectory: 'farmcontrol-ws', + remoteDirectorySDF: false, + removePrefix: '', + sourceFiles: '**/*' + ) + ], + usePromotionTimestamp: false, + useWorkspaceInPromotion: false, + verbose: true + ) + ]) + } + } + } + + post { + always { + cleanWs() + } + } +} +