在前面一篇文章中我们介绍了使用在Jenkinsfile中使用dockerfile来动态生成镜像,从而在指定的阶段进行使用。而对于将构建生成的二进制应用进行容器化,比如将spring boot应用的jar文件打包生成一个基于JRE或者JDK基础的镜像,这个可以使用docker.build来实现,这篇文章将继续结合示例来进行介绍。

环境准备

本文使用Easypack的LTS Jenkins 2.176.1版,环境准备请参看

  • https://liumiaocn.blog.csdn.net/article/details/92764938

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式为示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:6af0183fd58dea3d16f393b9e3272747
liumiaocn:jenkins liumiao$

创建Job

使用如下代码示例创建Job

liumiaocn:jenkins liumiao$ ls demo/pipeline/docker/build/config.xml
demo/pipeline/docker/build/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/docker/build/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.32"><actions><org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@1.3.8"/></actions><description>Pipeline Job Sample</description><keepDependencies>false</keepDependencies><properties><hudson.plugins.jira.JiraProjectProperty plugin="jira@3.0.7"/><com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.12"><gitLabConnection></gitLabConnection></com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty></properties><definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.69"><script>node {stage('Prepare Dockerfile') {sh 'cp /tmp/Dockerfile .' }stage('Build with default Dockerfile') {docker.build('my-nginx:v1')} stage('Build with specified dir') {docker.build("my-nginx:${env.BUILD_ID}","./")}stage('Build with specified Dockerfile') {docker.build("my-nginx:v2","-f Dockerfile ./")}}</script><sandbox>false</sandbox></definition><triggers/><disabled>false</disabled>
</flow-definition>
liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml"  --data-binary  "@demo/pipeline/docker/build/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_build
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

Jenkinsfile说明

本文示例所使用的Jenkinsfile信息如下所示,内容非常简单易读,简单说明如下:

  • node是结构,在其中可以指定stage等信息
  • stage为具体的节点,比如本文示例中模拟实际的准备Dockerfile、构建镜像等操作
  • 本示例中使用了三种镜像构建方式,虽然使用了Dockerfile作为名称,缺省的情况向是指当前目录下的Dockerfile;第二种方式只指定目录名,Dockerfile作为缺省名称;第三种通过-f指定名称 然后紧跟所在目录。
node {stage('Prepare Dockerfile') {sh 'cp /tmp/Dockerfile .' }stage('Build with default Dockerfile') {docker.build('my-nginx:v1')} stage('Build with specified dir') {docker.build("my-nginx:${env.BUILD_ID}","./")}stage('Build with specified Dockerfile') {docker.build("my-nginx:v2","-f Dockerfile ./")}}

执行Job

  • Dockerfile准备
    Dockerfile内容如下所示
liumiaocn:jenkins liumiao$ docker exec -it jenkins_jenkins_1 sh
/ # cat /tmp/Dockerfile
FROM nginx:latest
/ #
  • 事前确认
liumiaocn:jenkins liumiao$ docker images |grep my-nginx
liumiaocn:jenkins liumiao$

使用如下命令或者直接在Jenkins上点击构建

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_build/build
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

确认执行结果

使用如下命令可以确认相关的执行日志信息

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_build/1/consoleText
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/pipeline_job_build
[Pipeline] {[Pipeline] stage
[Pipeline] { (Prepare Dockerfile)
[Pipeline] sh
+ cp /tmp/Dockerfile .
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build with default Dockerfile)
[Pipeline] sh
+ docker build -t my-nginx:v1 .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM nginx:latest---> e445ab08b2be
Successfully built e445ab08b2be
Successfully tagged my-nginx:v1
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build with specified dir)
[Pipeline] sh
+ docker build -t my-nginx:1 ./
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM nginx:latest---> e445ab08b2be
Successfully built e445ab08b2be
Successfully tagged my-nginx:1
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build with specified Dockerfile)
[Pipeline] sh
+ docker build -t my-nginx:v2 -f Dockerfile ./
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM nginx:latest---> e445ab08b2be
Successfully built e445ab08b2be
Successfully tagged my-nginx:v2
[Pipeline] dockerFingerprintFrom
liumiaocn:jenkins liumiao$

blueocean构建结果确认

构建后镜像确认

liumiaocn:jenkins liumiao$ docker images |grep my-nginx
my-nginx                                        1                               e445ab08b2be        2 months ago        126MB
my-nginx                                        v1                              e445ab08b2be        2 months ago        126MB
my-nginx                                        v2                              e445ab08b2be        2 months ago        126MB
liumiaocn:jenkins liumiao$

注意事项

环境准备的docker-compose.yml中需要包含如下内容,以保证能够以容器方式运行的Jenkins能够进行镜像的生成。
- /var/run/docker.sock:/var/run/docker.sock
为了保证Jenkins-Crumb能够正常获取,不要设定如下Jenkins收起启动跳过插件内容的设定,以保证API的正常执行。
JAVA_OPTS=-Djenkins.install.runSetupWizard=false

参考内容

https://jenkins.io/doc/book/pipeline/docker/

Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像相关推荐

  1. IDEA中使用Docker插件构建镜像并推送至私服Harbor

    IDEA中使用Docker插件构建镜像并推送至私服Harbor 一.开启Docker服务器的远程访问 1.1 开启2375远程访问 1.2 添加harbor镜像配置 1.3 重启docker服务 二. ...

  2. 3.9 Docker最新入门教程-Docker入门-构建镜像最佳实践

    3.9 构建镜像最佳实践 安全扫描 构建镜像后,最好使用docker scan命令扫描它以查找安全漏洞.Docker 与Snyk合作提供漏洞扫描服务. 笔记 您必须登录到 Docker Hub 才能扫 ...

  3. 阿里云docker 环境构建镜像的:lastest not found 问题

    在按照 Docker练习场 操作时,pull 遇到 lastest not found ,是自己的镜像没有这个版本号,到"镜像版本"看也是没有的: 把pull 换成已有镜像,如:r ...

  4. docker push很慢怎么办_如何加速 Docker Build 构建过程

    Dockerfile docker 已经成为现代开发的基础技术, 而在 docker 开发流中, Dockerfile 是最基础的文件. 一个包括了系统配置.依赖安装.业务代码的 Dockerfile ...

  5. docker commit构建镜像(不推荐)

    dcoker commit镜像构建 获取docker镜像 # 下载镜像(默认从docker hub获取) docker pull ubuntu:14.04 搜索镜像 docker search IMA ...

  6. python基础编程小实例12——比赛票数排序(初级)

    编程语言:python3.9 题目 比赛采用计票机制,选手获得的票数越多,排名就越靠前. 本实例要求编写程序,接收选手的姓名和票数,输出排序后的成绩. 本题基于还没有学到如何使用python打开文件的 ...

  7. docker 制作 jar 镜像

    第一步:首先在你存放jar包 目录下 创建Dockerfile 文件 touch Dockerfile 第二步:编写制作镜像的命令文件也就是Dockerfile文件 vi Dockerfile #指定 ...

  8. Docker build失败

    Docker学习·闭坑分享 很久没有更新Csdn了,最近碰到的云计算项目太多了,太多虚拟化.容器.集群....于是为了避开未来职业瓶颈,捡起学习从容器到底层虚拟化! 分享通过Dockerfile文件使 ...

  9. Jenkins基础:使用NPM构建前端应用6:部署前端镜像

    在前一篇文章中介绍了在Jenkins中利用NodeJS插件实现创建.编译.镜像生成以及私库推送的Angular的应用的过程,这篇文章将进一步延伸,将生成的镜像直接运行起来. 基础知识 如果对于Node ...

最新文章

  1. iOS网络缓存扫盲篇
  2. 腾讯首次发布 AI 白皮书讲了什么?
  3. HashMap 1.8 源码解析以及非线程安全分析
  4. 【LeetCode】002 Add Two Numbers
  5. mysql timestampt 输入字符串的格式不正确._mysql中取出的时间格式不正确
  6. elasticsearch2.2之javaApi
  7. 2009年5月14日
  8. 操作系统考研辅导教程(计算机专业研究生入学考试全真题解) pdf,计算机组成原理考研辅导教程:计算机专业研究生入学考试全真题解...
  9. (大数据工程师学习路径)第四步 SQL基础课程----SQL介绍及mysql的安装
  10. 从零学ELK系列(二):VMware安装Centos(超详细图文教程)
  11. .Net转Java自学之路—Spring框架篇二(IOC注解、AOP)
  12. linux命令 chmod_Linux chmod命令示例
  13. ISO9001和ISO27001质量管理体系(详解)
  14. 盘点新加坡旅游宣传片中不可错过的景点
  15. 怎么用软件设计班旗_设计制作:班旗设计
  16. 英国研制出新型机器人具有10种人类表情(组图)
  17. tplink虚拟服务器 tcp,关于TP-Link路由器端口映射详解
  18. 两数之和c++实现 java实现 two sum
  19. php课程banner,5种关于banner图的实例代码
  20. 考虑交通网络流量的电动汽车充电站规划matlab 采用matlab软件参照相关资料完成电动汽车程序

热门文章

  1. 泥瓦匠想做一个与众不同的技术匠
  2. 圆形区域函数可视化和泊松方程求解
  3. java imageio temp_Java ImageIO.setUseCache方法代碼示例
  4. (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
  5. html 设计好看的按钮,html 好看按钮
  6. 软电话对接鼎信DWG无线网关
  7. 【解决方案】Microsoft Edge 浏览器 出现“无法访问该页面”问题
  8. 青龙面板+傻妞+JD(自用)
  9. 怎么把彩色的照片变黑白色?
  10. 深入boot.img格式文件结构解析