我对詹金斯还是很陌生。我正在尝试构建一个 docker 镜像,对其进行测试并推送到注册表。
测试阶段涉及确保 http 端点能够返回状态码 200 我的 Jenkinsfile 代码有问题,会抛出错误。我安装了 jenkins pipeline linter 来提供帮助,但是一旦我清除错误,它就会带来新的错误。 我很感激我的 jenkinsfile 代码帮助我纠正了我的错误。谢谢。
请看下面的代码:
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '5'))
}
environment {
DOCKERHUB_CREDENTIALS = credentials('dockerhub')
}
stages {
stage('Build image') {
steps {
script {
sh 'docker build -t (stlng/freeze-$env.BRANCH_NAME:$env.BUILD_NUMBER) .'
}
}
}
stage('Test image') {
agent
stages {
steps {
stage('Launch app') {
steps {
sh 'docker compose -f freeze.yml up -d'
}
}
stage('testing endpoint') {
steps {
httpRequest url:'http://localhost:8000',
validResponseCodes:'200'
}
}
stage('shutting down app') {
steps {
sh 'docker compose -f freeze.yml down'
}
}
}
}
}
stage('dockerHub login') {
steps {
sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin'
}
}
stage('Push image to registry') {
steps {
sh 'docker push (stlng/freeze-$env.BRANCH_NAME:$env.BUILD_NUMBER)'
}
}
stage('dockerhub logout') {
steps {
sh 'docker logout'
}
}
/*** workspace clean up*/
post {
always {
sh 'docker system prune'
cleanWs()
}
}
}
}
以下是最后的一些错误。一旦我设法清除一组,就会出现新的。
Errors encountered validating Jenkinsfile:
WorkflowScript: 19: Not a valid stage section definition: "agent". Some extra configuration is required. @ line 19, column 9.
stage('Test image') {
^
WorkflowScript: 22: Expected a stage @ line 22, column 17.
steps {
^
WorkflowScript: 63: Expected a stage @ line 63, column 9.
post {
^
WorkflowScript: 21: No stages specified @ line 21, column 13.
stages {
^
我原来的 Jenkinsfile 没有测试阶段和清理阶段(请参见下文),并且运行良好。当我尝试介绍 2 个阶段时,错误开始了。
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '5'))
}
environment {
DOCKERHUB_CREDENTIALS = credentials('dockerhub')
}
stages {
stage('Build image for app') {
steps {
sh 'docker build -t stlng/freeze-master:0.0.1 .'
}
}
stage('Login to docker hub') {
steps {
sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin'
}
}
stage('Push docker image to docker hub registry') {
steps {
sh 'docker push stlng/freeze-master:0.0.1'
}
}
}
post {
always {
sh 'docker logout'
}
}
}
看起来你有嵌套阶段的步骤,这是无效的。如果需要,您可以在阶段中嵌套阶段。但是,步骤不能包含阶段。
stage('Test image') {
agent
stages {
steps { // <----This is the problem
stage('Launch app') {