【问题标题】:Getting containers to run with a Jenkinsfile让容器使用 Jenkinsfile 运行
【发布时间】:2018-02-20 11:14:08
【问题描述】:

我在编写 Jenkinsfile 时遇到问题。 我的环境:

  • 运行 docker 的服务器
  • Jenkins 在服务器上作为容器运行

我在 DockerHub 上有一个 Docker 映像,获取该映像没有问题。

我的Jenkinsfile 目前看起来像这样:

pipeline {
  agent {
    docker {
      image 'emil2709/servopsdockerfile'
      args '-d -p 80:80 /usr/sbin/apache2ctl -D FOREGROUND'
    }
  }

  stages {
    stage ('Testing') {
      steps {
        sh 'echo testing'
      }
    }
    stage ('Deploying') {
      steps {
        sh 'echo deploying'
      }
    }
  }
}

容器不会运行。
我想:

  • 制作一个测试容器
  • 如果我的所有测试都正常,我想部署一个新的容器,它就是网络服务器。

我的问题是让 Docker 容器运行,我该怎么做?

【问题讨论】:

  • 运行jenkins的机器有docker守护进程吗?
  • 是的,这台机器有 docker 守护进程。
  • 你准备好 Dockerfile 了吗?
  • 是的,我愿意。我的 dockerfile 是一个运行 apache 的 ubuntu 14.04。

标签: docker jenkins containers dockerfile jenkins-pipeline


【解决方案1】:

您可以在 Docker 映像上运行测试,该映像具有构建和测试源代码所需的工具。然后,在构建项目之后,您可以创建一个新的 docker 镜像。

假设您有一个使用 maven 的 java 项目。在这种情况下,测试并构建您的源代码。然后,在下一阶段,只需创建您的 docker 映像。

IMAGE_ID:包含必要工具的 docker 镜像,在示例中为 maven。

你需要一个 Dockerfile 来发出命令docker build

pipeline {

  stages {
    stage ('Building') {
      steps {
        sh '''
        docker run -i --rm -v ./:/src -w /src IMAGE_ID  /bin/bash -c "mvn test package" 
        '''
      }
    }
    stage ('dockerization') {
      steps {
        sh '''
        docker build -t your_tag .
        docker push ...
        '''
      }
    }
  }
}

一个最小的 Dockerfil 示例:

FROM openjdk:8-jdk
COPY target/*.jar /app/application.jar
EXPOSE 8080
ENTRYPOINT java -jar /app/application.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2019-03-24
    相关资源
    最近更新 更多