docker - 在Jenkins声明式管道中的代理设置期间,如何运行某些内容?

标签 docker jenkins gradle

我们当前的Jenkins管道如下所示:

pipeline {

  agent {
    docker {
      label 'linux'
      image 'java:8'
      args '-v /home/tester/.gradle:/.gradle'
    }
  }

  environment {
    GRADLE_USER_HOME = '/.gradle'
    GRADLE_PROPERTIES = credentials('gradle.properties')
  }

  stages {
    stage('Build') {
      steps {
        sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
        sh './gradlew clean check'
      }
    }
  }

  post {
    always {
      junit 'build/test-results/**/*.xml'
    }
  }

}

我们挂载/.gradle是因为我们想在构建之间重用缓存的数据。问题是,如果计算机是全新的构建计算机,则主机上的目录尚不存在。

我应该将之前运行的设置逻辑放在哪里,以便可以确保在运行docker镜像之前该目录存在?

最佳答案

您可以在所有阶段之前运行准备阶段,然后再更改代理

pipeline {

  agent { label 'linux' } // slave where docker agent needs to run

  environment {
    GRADLE_USER_HOME = '/.gradle'
    GRADLE_PROPERTIES = credentials('gradle.properties')
  }

  stages {

    stage('Prepare') {
      // prepare host
    }

    stage('Build') {

      agent {
        docker {
          label 'linux' // should be same as slave label
          image 'java:8'
          args '-v /home/tester/.gradle:/.gradle'
        }
      }

      steps {
        sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
        sh './gradlew clean check'
      }
    }
  }

  post {
    always {
      junit 'build/test-results/**/*.xml'
    }
  }

}

Specifying a Docker Label

Pipeline provides a global option in the Manage Jenkins page, and on the Folder level, for specifying which agents (by Label) to use for running Docker-based Pipelines.



How to restrict the jenkins pipeline docker agent in specific slave?

关于docker - 在Jenkins声明式管道中的代理设置期间,如何运行某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53095345/

相关文章:

grails - 电子邮件插件Gradle或Grails?

docker - 将主机目录挂载到从Docker容器中运行的Docker容器中

bash - 如何将命令行参数传递给docker-compose run?

shell - 如何从 jenkins 启动 appium 服务器和模拟器,然后运行 ​​selenium 测试用例?

jenkins - 编译 groovy 项目并通过 Jenkins 运行 JUnit 测试

plugins - 带有Measurement Plots插件的Jenkins不会绘制测量值

java - 了解Gradle项目的依赖性,Gradle站点示例似乎不完整

mysql - Docker percona (mysql mariadb) 容器在定义卷 (-v) 后在 ubuntu 上运行后停止

python - 无法让我的 python 应用程序在 docker 容器中启动

Android Studio 3.0警告: Using incompatible plugins for the annotation processing