把代码和环境做成docker镜像_Jenkins把GitHub项目做成Docker镜像
本文是《Jenkins流水线(pipeline)实战》系列的第三篇,前面已对Jenkins流水线有了基本认识,也试过从GitHub下载pipeline脚本并执行,今天的实战是编写一段pipeline脚本,该脚本的作用是从GitHub下载一个Java项目(Maven构建的),然后编辑构建此项目,并将构建结果制作成Docker镜像并且推送到私有镜像仓库;
系列文章地址
环境信息
为了快速完成Jenkins部署,本次实战用到了Docker,请在实战前准备好以下环境:
操作系统:Ubuntu 18.04.2 LT
Jenkins:2.176.3
Docker:19.03.1
私有镜像仓库:Harbor 1.9.0
实战内容简介
今天的实战功能如下图所示:
关于Docker私有镜像仓库Harbor
构建好的Docker镜像,会被推送到Docker镜像仓库Harbor,此仓库是我自己在本地搭建的,详细搭建步骤请参考《CentOS部署Harbor镜像仓库》
如果您有hub.docker.com网站的账号,也可以直接将镜像推送到此网站,这样大家都能使用到您制作的镜像了。
关于本次用到的GitHub项目
本次实战会将一个GitHub上的项目先编译,再构建成Docker镜像,我这边准备了一个基于Maven构建的SpringBoot项目,这是个Hello world级别的工程,唯一特别之处是pom.xml中用到了Jib插件,用来将SpringBoot项目构建成Docker镜像。
该项目的源码可以从GitHub上下载,地址和链接信息如下表所示:
| 名称 | 链接 | 备注|
| :-------- | :----| :----|
| 项目主页| https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
| git仓库地址(https)| https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh)| git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
这个git项目中有多个文件夹,本章的应用在hellojib文件夹下,如下图所示:
来看看此工程的pom.xml,重点是Jib插件部分,如下所示:
com.google.cloud.tools
jib-maven-plugin
1.3.0
openjdk:8-jdk-stretch
bolingcavalry/hellojib:${project.version}
-Xms4g
-Xmx4g
8080
使用Jib将SpringBoot项目构建成Docker镜像的更多信息,请参考《Docker与Jib(maven插件版)实战》;
用私有的GitHub仓库来实战
考虑到实际工作中大多数源码都没有对外公开,因此我这里也建了个私有GitHub仓库,地址是:https://github.com/zq2599/pipeline.git ,将前面提到的的hellojib工程所有源码都放入此仓库;
pipeline下载私有仓库的源码时需要身份验证,验证方式后面会说到。
这个私有仓库里面并不只有hellojib一个工程,仓库的根目录下的hellojib目录里面才是构建镜像会用到的Maven工程:
创建Jenkins任务
创建一个名为build-image流水线任务:
接来下我们要借助Jenkins提供的语法工具来生成下载GitHub的pipeline代码,如下图,在设置任务的页面点击红框中的流水线语法按钮:
现在进入的页面是Jenkins辅助我们编写pipeline脚本的地方,请按照下图操作:
在弹出的窗口配置一个保存了GitHub账号和密码的秘钥配置项,请按照下图的数字顺序操作:
如下图红框所示,在下拉菜单中选择刚才创建的秘钥配置:
此时可以发现之前的红色错误提示已经消失(因为鉴权通过了),点击下图红框中的按钮即可生成pipeline源码:
完整的pipeline脚本内容如下,其中Checkout阶段从GitHub下载的那段脚本,就是上图中自动生成的:
pipeline {
agent any
tools {
maven 'mvn-3.6.2'
}
stages {
stage('Checkout') {
steps {
echo '从GitHub下载项目源码'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git-account-passwd', url: 'https://github.com/zq2599/pipeline.git']]])
}
}
stage('Build') {
steps {
echo '开始编译构建'
sh 'cd hellojib && mvn clean compile -U -DskipTests jib:dockerBuild'
}
}
stage('Push') {
steps {
echo '将本地Docker镜像推送到Harbor镜像仓库'
echo '给当前镜像设置带有Harbor地址和项目名称的Tag,这样才能推送到Harbor的library项目之下'
sh 'docker tag bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
echo '登录Harbor'
sh 'docker login 192.168.50.167 -u admin -p Harbor12345'
echo '登录chengg成功,开始推送镜像'
sh 'docker push 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
}
}
stage('Clean') {
steps {
echo '清理Maven工程'
sh 'cd hellojib && mvn clean'
echo '删除镜像'
sh 'docker rmi bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
echo '清理完毕'
}
}
}
}
将上面的pipeline脚本填写到build-image任务的流水线脚本输入框中,如下图:
点击下图红框中的立即构建即可开始执行流水线任务:
如果配置无误的话任务可以执行成功,如下图,每个阶段的执行结果和耗时都展现出来了:
如果您的任务构架失败了,点击下图红框中的小圆球,会打开任务执行的详细日志,用来检查错误原因:
登录Harbor网站,可以看到推送过来的镜像:
### 把pipeline脚本放在GitHub上
今天的实战中,编写的pipeline脚本是保存在任务的设置中的,还记得 《让Jenkins执行GitHub上的pipeline脚本》一篇的内容么?您可以尝试将今天的pipeline脚本存放在GitHub上,这样从构建脚本到业务项目都实现了版本控制,在多人开发阶段更加实用。
至此,基于pipeline操作的GitHub项目的实战就完成了,如果您正在寻求容器化环境的CI && CD方案,愿本文能给您提供一些参考。
文章来源: www.cnblogs.com,作者:zq2599,版权归原作者所有,如需转载,请联系作者。
原文链接:https://www.cnblogs.com/bolingcavalry/p/11568774.html
把代码和环境做成docker镜像_Jenkins把GitHub项目做成Docker镜像相关推荐
- github镜像网站_Jenkins把GitHub项目做成Docker镜像
本文是<Jenkins流水线(pipeline)实战>系列的第三篇,前面已对Jenkins流水线有了基本认识,也试过从GitHub下载pipeline脚本并执行,今天的实战是编写一段pip ...
- Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...
- docker eclipse打包_【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)...
写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...
- docker中java钩子_springboot项目在docker容器中如何优雅关闭
前言 什么是优雅关闭 在我看来所谓的优雅关闭,就是在系统关闭时,预留一些时间,让你有机会来善后一些事情 什么时候需要优雅关闭 是否所有项目都需要优雅关闭?那也不一定,毕竟所谓的优雅关闭,另一面就意味这 ...
- 基于docker部署前后端分离项目--->docker+Dockerfile+vue+nginx+uwsgi+django+socket+负载均衡
1. 介绍 本文基于阿里云服务器,安装的ubuntu20.04系统 适用于conten7.5系列 适用于ubuntu16.04以上系列 vue已经打包完成,所以不能使用我的vue项目 2. 部署 部署 ...
- docker安装+配置镜像+命令操作+数据卷+网络管理+DockerFile+镜像服务+项目部署+[高级使用]
文章目录 Docker基础 一.Docker介绍 1. 什么是虚拟化 2. 什么是Docker 3. 容器与虚拟机比较 4. Docker优势 5. Docker架构 [1]镜像服务(`Image`) ...
- Docker圣经:大白话说Docker底层原理,6W字实现Docker自由
说在前面: 现在拿到offer超级难,甚至连面试电话,一个都搞不到. 尼恩的技术社群(50+)中,很多小伙伴凭借 "左手云原生+右手大数据"的绝活,拿到了offer,并且是非常优质 ...
- 把代码和环境做成docker镜像_新手指南:如何将应用打包成为 Docker 镜像?
虽然 DockerHub 提供了大量的镜像,但是由于企业环境的多样性,并不是每个应用都能在 DockerHub 找到对应的镜像来使用.那就要求企业的运维人员掌握制作 Docker 镜像的技能.在开始打 ...
- Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境
Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...
最新文章
- CTO多要会刷脸--
- c语言对空指针memcpy,C语言memcpy 断错误
- LeetCode 487. 最大连续1的个数 II(滑动窗口)
- AI从业几年还不具备提出新模型的技术能力?看这个就够了!
- java keypad game,关于java:Custom Keypad – 如何使这些按钮正常工作?
- Java中跳出多层循环的简单方法
- pcb只开窗不镀锡_只因为把高速PCB旋转了一下,结果地覆天翻……
- 共享办公室租赁,突出市场重围
- java源码编译指令
- f452虚拟服务器,中兴f452网关,超级用户的密码如何获得,启动路由功能
- vulhub漏洞复现十七_GhostScript
- 什么是存储过程?为什么要写存储过程
- 百度Java后端实习面试
- “智慧银行”行业研究报告要点整理
- QML_虚拟键盘使用
- AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第18章:SENDING EMAIL AND TEXT MESSAGES
- 递归下降分析法实现强化计算器
- 北京某牧场管理企业——牧场智慧管理项目
- MSF基础--show options
- STM32——USART串口
热门文章
- Java面试汇总+答案
- Java字节序与大小端转换_什么时候要进行大小端字节序的转换? | 学步园
- 简单易懂读《重构》 - Speculative Generality (高估未来的可能性)
- 毕业两年,工作三年Java程序员的一点点体会与建议
- 如何通过echarts绘制北京市地图并可以添加标记并可点击
- 学python重点是什么_如果只有1小时学Python,看这篇就够了
- springboot项目配置视图解析器无效的问题
- 让进度条颜色渐变的shader
- 玄幻:开局选择瑶池,我只想默默签到!(三)
- html5青蛙过河,[推荐]===PS4上的本地多人游戏推荐心得===家庭聚会,欢乐时光 (持续更新)...