我正在学习如何在我的CI / CD项目中使用Jenkins和jenkinsfile,并且在尝试运行docker映像以对其进行硒测试时,抛出错误,提示缺少docker映像参数。
我已经在jenkins网站上的码头上进行了教程学习,现在我正尝试将其调整为适合自己的目的。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
sh 'npm install'
}
}
stage('Test') {
steps {
echo 'Testing..'
docker {
image 'selenium/standalone-firefox:3.141.59-gold'
args '-p 4444:4444'
}
sh 'npm test'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
}
Docker应该在我的Ubuntu服务器上运行,并暴露docker的端口4444并映射到服务器的端口4444。
答案 0 :(得分:0)
您将Declarative Pipeline
用于Jenkinsfile,而不是Scripted Pipeline
。对于Declarative Pipeline
,docker
是一条伪指令,只能用于为整个管道或阶段指定agent
,如下所示:
pipeline {
agent { // specify docker container for entire pipeline
docker {
image ''
args ''
}
}
}
stage('test') {
agent { // all steps of this stage will be executed inside this docker container
docker {
image ''
args ''
}
}
}
您不能将此docker
指令用作管道步骤,例如sh
,“ echo”。
Jenkins确实提供了docker
DSL,可以直接在Scripted Pipeline
中使用。
Declarative Pipeline
提供了一个步骤script
,我们可以在其中放置类似于脚本的管道脚本,如下所示:
stage('test') {
steps {
script {
def version = ....
def img = docker.build(...)
img.push()
docker.image(...).inside(){}
}
}
}
因此,您可以按照以下方式更改Jenkinsfile并进行尝试。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
sh 'npm install'
}
}
stage('Test') {
steps {
echo 'Testing..'
script {
docker.image('selenium/standalone-firefox:3.141.59-gold')
.inside('-p 4444:4444'){}
}
sh 'npm test'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
}
默认情况下,Docker Pipeline集成假定Docker Hub的默认Docker Registry。
如果打算使用自定义Docker注册表,则可以使用docker.withRegistry
指定自定义注册表URL和凭据,如下所示:
stage('Test') {
steps {
echo 'Testing..'
script {
docker.withRegistry('<custom docker registry>',
'<credentialsId for custom docker registry if required>') {
docker.image('selenium/standalone-firefox:3.141.59-gold')
.inside('-p 4444:4444'){}
}
}
sh 'npm test'
}
}
注意::如果自定义Docker注册表需要使用credentails,则必须通过Jenkins凭据将自定义Docker注册表的帐户添加到Jenkins中。添加后,Jenkins将为您的帐户分配一个ID,即上述代码中使用的ID。