Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像
发布日期:2021-06-30 20:13:32 浏览次数:2 分类:技术文章

本文共 4668 字,大约阅读时间需要 15 分钟。

在前面一篇文章中我们介绍了使用在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:32002liumiaocn: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_crumbJenkins-Crumb:6af0183fd58dea3d16f393b9e3272747liumiaocn:jenkins liumiao$

创建Job

使用如下代码示例创建Job

liumiaocn:jenkins liumiao$ ls demo/pipeline/docker/build/config.xmldemo/pipeline/docker/build/config.xmlliumiaocn:jenkins liumiao$ cat demo/pipeline/docker/build/config.xml
Pipeline Job Sample
false
false
false
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_buildliumiaocn:jenkins liumiao$ echo $?0liumiaocn: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-nginxliumiaocn:jenkins liumiao$

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

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

确认执行结果

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

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_build/1/consoleTextStarted by user rootRunning in Durability level: MAX_SURVIVABILITY[Pipeline] Start of Pipeline[Pipeline] nodeRunning 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.048kBStep 1/1 : FROM nginx:latest ---> e445ab08b2beSuccessfully built e445ab08b2beSuccessfully 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.048kBStep 1/1 : FROM nginx:latest ---> e445ab08b2beSuccessfully built e445ab08b2beSuccessfully 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.048kBStep 1/1 : FROM nginx:latest ---> e445ab08b2beSuccessfully built e445ab08b2beSuccessfully tagged my-nginx:v2[Pipeline] dockerFingerprintFromliumiaocn:jenkins liumiao$

blueocean构建结果确认

在这里插入图片描述

构建后镜像确认

liumiaocn:jenkins liumiao$ docker images |grep my-nginxmy-nginx                                        1                               e445ab08b2be        2 months ago        126MBmy-nginx                                        v1                              e445ab08b2be        2 months ago        126MBmy-nginx                                        v2                              e445ab08b2be        2 months ago        126MBliumiaocn: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/

转载地址:https://liumiaocn.blog.csdn.net/article/details/102634729 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Jenkins基础:Jenkinsfile使用实例:14:使用docker.image进行容器部署
下一篇:Jenkins基础:使用NPM构建前端应用3:使用NodeJS构建前端应用

发表评论

最新留言

很好
[***.229.124.182]2024年04月24日 07时39分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

tensorflow使用tensorboard进行可视化 2019-04-30
神经网络调参实战(二)—— activation & initializer & optimizer 2019-04-30
凸优化 convex optimization 2019-04-30
数据库索引 & 为什么要对数据库建立索引 / 数据库建立索引为什么会加快查询速度 2019-04-30
IEEE与APA引用格式 2019-04-30
research gap 2019-04-30
pytorch训练cifar10数据集查看各个种类图片的准确率 2021-07-03
Python鼠标点击图片,获取点击点的像素坐标 2021-07-03
路径规划(一) —— 环境描述(Grid Map & Feature Map) & 全局路径规划(最优路径规划(Dijkstra&A*star) & 概率路径规划(PRM&RRT)) 2021-07-03
神经网络调参实战(四)—— 加深网络层次 & 批归一化 batch normalization 2021-07-03
数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(1)—— 假设检验(μ&卡方检验&方差检验(F检验))&相关系数(皮尔逊&斯皮尔曼) 2021-07-03
RRT算法(快速拓展随机树)的Python实现 2021-07-03
路径规划(二) —— 轨迹优化(样条法) & 局部规划(人工势能场法) & 智能路径规划(生物启发(蚁群&RVO) & 强化学习) 2021-07-03
D*算法 2021-07-03
强化学习(四) —— Actor-Critic演员评论家 & code 2021-07-03
RESTful API 2021-07-03
优化算法(四)——粒子群优化算法(PSO) 2021-07-03
数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(2)——回归分析(最小二乘法&决定系数&残差不相关)&主成分分析&奇异值分解 2021-07-03
数据在Oracle中的存储 2021-07-03
优化算法(五)—人工蜂群算法Artificial Bee Colony Algorithm(ABC) 2021-07-03