複数のステージを持つパイプラインがあり、すべてではなく「n」個のステージ間でのみdockerコンテナーを再利用したいと思います。
pipeline {
agent none
stages {
stage('Install deps') {
agent {
docker { image 'node:10-Alpine' }
}
steps {
sh 'npm install'
}
}
stage('Build, test, lint, etc') {
agent {
docker { image 'node:10-Alpine' }
}
parallel {
stage('Build') {
agent {
docker { image 'node:10-Alpine' }
}
// This fails because it runs in a new container, and the node_modules created during the first installation are gone at this point
// How do I reuse the same container created in the install dep step?
steps {
sh 'npm run build'
}
}
stage('Test') {
agent {
docker { image 'node:10-Alpine' }
}
steps {
sh 'npm run test'
}
}
}
}
// Later on, there is a deployment stage which MUST deploy using a specific node,
// which is why "agent: none" is used in the first place
}
}
スクリプトパイプライン を使用できます。ここでは、stage
ステップ内に複数のdocker
ステップを配置できます。
node {
checkout scm
docker.image('node:10-Alpine').inside {
stage('Build') {
sh 'npm run build'
}
stage('Test') {
sh 'npm run test'
}
}
}
(テストされていないコード)
宣言型パイプラインの場合、1つの解決策は、プロジェクトのルートでDockerfileを使用することです。例えば.
Dockerfile
FROM node:10-Alpine
// Further Instructions
Jenkinsfile
pipeline{
agent {
dockerfile true
}
stage('Build') {
steps{
sh 'npm run build'
}
}
stage('Test') {
steps{
sh 'npm run test'
}
}
}