为什么我的 Jenkinsfile 会抛出工作流脚本错误?

问题描述 投票:0回答:1

我对詹金斯还是很陌生。我正在尝试构建一个 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'
    }
  }
  
}
validation jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

看起来你有嵌套阶段的步骤,这是无效的。如果需要,您可以在阶段中嵌套阶段。但是,步骤不能包含阶段。

stage('Test image') {
    agent
        stages {
            steps { // <----This is the problem
                stage('Launch app') {
© www.soinside.com 2019 - 2024. All rights reserved.