Я пытаюсь построить конвейер для приложения Node JS, используя git и докеры. Я сделал декларативный Jenkinsfile, из которого все работает гладко. Я установил опрос SCM на каждые две минуты, и он вызывается правильно, но проблема заключается в том, что старый конвейер все еще работает, поэтому новый опрос ставится в очередь с сообщением Ожидание следующего доступного исполнителя . Я хотел знать, все ли я сделал правильно и чего мне не хватает.
Мой полный код можно найти здесь .
Я попытался сделать npm start в delivery.sh файле с & , чтобы он работал в режиме демона, и использовал вводопция сообщения в Jenkinsfile, чтобы остановить завершение конвейера, в противном случае только с «npm start &» и без «входного сообщения» конвейер достигает конца конвейера и созданный контейнер приложения уничтожается. Я уверен, что этот подход не является правильным. Затем я выполнил npm start без & и wihtout входное сообщение и опрос scm при вызове, и конвейер также начал выполнять этапы, но поскольку последний контейнер уже опубликован дляпорт 3000, очевидно, он не будет публиковать новый для 3000, поэтому конвейер возвращает ошибку.
Dockerfile
FROM node:alpine
COPY . .
EXPOSE 3000
Jenkinsfile
pipeline {
triggers {
pollSCM 'H/2 * * * *'
}
agent { dockerfile {
args '-p 3000:3000'
}
}
stages {
stage('Build') {
steps {
sh 'npm install'
}
}
stage('Deliver') {
steps {
sh './jenkins/scripts/deliver.sh'
// input message: 'Finished using the web site? (Click "Proceed" to continue)'
// sh './jenkins/scripts/kill.sh'
}
}
}
}
скрипт delivery.sh
# set -x
# npm start &
npm start
# sleep 1
# copying process ID of npm start to file name pidfile, this id will
# be used when the user press any key to stop the app
# echo $! > .pidfile
# set +x
Любая помощь в этом отношении будет принята с благодарностью.