docker - 使用 Jenkinsfile 让容器运行

标签 docker jenkins containers dockerfile jenkins-pipeline

我在编写 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 容器运行,我该怎么做?

最佳答案

您可以在 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

关于docker - 使用 Jenkinsfile 让容器运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884007/

相关文章:

tomcat - docker tomcat通过dockerfile编辑配置文件

Docker ps 显示我无法停止或杀死的正在运行的容器。如何停止/杀死该容器?

apache - 如何使 docker 应用程序使用端口 80 (http) 而不是 443 (https)

java - Java如何在Jenkins中使用环境变量?

linux - 使用安装在 Linux 机器上的 Jenkins 在 IE 驱动程序上运行测试

docker - 如何重新启动 Bluemix 安全网关 Docker 客户端

css - 流体宽度容器拥抱 float

docker - filebeat + kubernetes + elasticsearch不保存特定字段

docker - 在特定位置创建 Docker 卷

Jenkins 管道手动步骤权限