全球资讯:Docker+Jenkins+Gitee自动化部署maven项目
1.简介
各位看官老爷,本文为Jenkins实战,注重过程,希望大家阅读完之后能够有以下收获:
了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用Jenkins+Gitee实现自动化部署2.Jenkins介绍
相信,正在读这篇文章的你,对Jenkins应该有或多或少的了解,就算没有也应该在某个地方听说过。
接下来,我们就一起来进行探索吧。
【资料图】
2.1 Jenkins是什么
Jenkins是一个开源的自动化工具,可以自动化地完成构建、测试、交付或部署等任务。总之重点就是三个字:自动化,至于如何实现这些功能,Jenkins基于插件化的机制,提供了众多的插件来完成持续集成与持续部署。
2.2 什么是持续集成与持续部署
在软件开发中经常会提到持续集成(Continuous Integration)和持续部署(Continuous Delivery),那么它们的真正意思是什么呢?
『持续集成』:当我们向代码仓库提交代码后,可以对变更进行监测,进而实现自动拉取代码、构建、测试等操作。试想一下,如果这些操作都手动进行,效率是非常低的,因而提出了持续集成。
『持续部署』:持续集成帮助我们实现了对项目的自动化构建、测试等工作,我们知道,项目最终需要部署到服务器上,在不借助Jenkins的情况下,需要我们手动将项目部署到服务器上,如果项目数量多,就会容易出现错误且效率低,而且特别麻烦,因而提出了持续部署,来实现对项目的自动化部署。
同样滴,Jenkins借助插件,例如Maven、Git、Pipeline、SSH等来实现这一系列的功能。
3.Docker安装Jenkins
系统环境:ubuntu20.04 + Docker20.10.8
3.1 拉取镜像
docker pull jenkins/jenkins:lts
3.2 启动容器
docker run -d --restart=always --name jenkins -uroot -p 8080:8080 -p 50000:50000 -v /home/docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts
说明:这里我们挂载了宿主机的/var/run/docker.sock以及/usr/bin/docker,是因为,我们后续需要在容器内执行docker相关命令。
3.3 Jenkins初体验
访问http://192.168.110.101:8080,会出现如下界面:
提示我们可以去容器的/var/jenkins_home/secrets/initialAdminPassword中查看登录密码,我们一开始已经将/var/jenkins_home挂载到宿主机的/home/docker/jenkins,因此我们直接去宿主机的对应目录进行查看。
# 查看初始化登录密码 cat /home/docker/jenkins/secrets/initialAdminPassword
然后将密码复制粘贴到输入框,会进入如下界面:
不得不说,这里Jenkins的选项对于新手小白还是挺友好的,我们选择安装推荐的插件,至于后面我们所要用到的功能,再去插件市场按需安装即可。
可以看到,Jenkins为我们安装了Git、Pipeline等常用插件,因为Jenkins默认使用的是国外的安装源,咱们耐心等待一下。
经历过漫长的等待,终于,终于,这个步骤是走完了,但还是有些插件下载失败了,后续我们再手动安装吧。不得不说,这下载速度着实有点慢啊!!!
这里我们就不创建新用户了,使用admin账户继续。
点击保存并完成。提示部分插件需要重启才会生效。
终于,它来了。小伙伴们上号!!!
主界面如下:
这里我们先修改一下admin账户的登录密码,否则只能使用安装时提到的初始化密码。当然,如果你在前面的步骤中创建了新的管理员用户,就可以忽略该步骤。
3.Jenkins插件安装、环境配置
3.1 插件安装
我们这里是部署一个maven的单模块项目,同时需要用到Gitee的WebHook,因此需要下载Maven、Gitee相关的插件,所以在Jenkins首页选择系统管理---》插件管理,搜索进行下载即可。
下载完成后,点击返回首页。
3.2 配置maven
在Jenkins首页点击系统管理---》全局工具配置。在这里我们可以对Maven、JDK等要使用的环境进行配置。我这里只对Maven进行了配置,JDK无需配置,因为我们后续在将项目打包成Docker镜像时,会将JRE运行环境一起打包。
在Maven配置这里,使用默认Maven配置即可。由于我们的Jenkins运行在Docker之中,因此需要在容器中安装Maven,这里我们选择自动安装(会安装到/var/jenkins_home/tools目录下),也可以自行下载,然后将文件放在该目录下即可。
3.3 添加凭据
由于需要使用Git从Gitee仓库拉取代码,我们这里添加一个Gitee的SSH key。Jenkins首页---》系统管理---》Credentials,这里应该是Jenkins的汉化插件没有汉化完全,不过无伤大雅。
1)添加凭据页面
2)创建SSH key
Gitee官方提供了添加生成SSH key的方法:https://gitee.com/help/articles/4181,总结命令如下:
# 生成密钥,一直按回车即可。 ssh-keygen -t ed25519 -C "jenkins@example.com" # 查看公钥 cat ~/.ssh/id_ed25519.pub # 将host添加到SSH信任列表 ssh -T git@gitee.com
接下来我们就进入Jenkins容器,执行这些命令。
docker exec -it jenkins bash
3)Gitee设置中添加SSH key
这时候我们再回过头来,将私钥添加到凭据中,一个凭据就添加好了。
4.Jenkins自动化部署Maven单模块项目
4.1 准备Maven项目
准备一个Maven项目,我这里是一个简单的基于SpringBoot的Web项目。项目结构如下:
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.stone</groupId> <artifactId>jenkins-test</artifactId> <version>1.0.0-SNAPSHOT</version> <description>Jenkins-test</description> <properties> <java.version>11</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--开启分层构建--> <layers> <enabled>true</enabled> </layers> </configuration> </plugin> </plugins> </build> </project>
Dockerfile
# 指定基础镜像,这是分阶段构建的前期阶段 FROM openjdk:11-jre as builder # 执行工作目录 WORKDIR apps # 配置参数 ARG JAR_FILE=target/*.jar # 将编译构建得到的jar文件复制到镜像空间中 COPY ${JAR_FILE} application.jar # 通过工具spring-boot-jarmode-layertools从application.jar中提取拆分后的构建结果 RUN java -Djarmode=layertools -jar application.jar extract # 正式构建镜像 FROM openjdk:11-jre RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" >/etc/timezone WORKDIR apps # 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令复制到镜像空间中,每次COPY都是一个layer COPY --from=builder apps/dependencies/ ./ COPY --from=builder apps/spring-boot-loader/ ./ COPY --from=builder apps/snapshot-dependencies/ ./ COPY --from=builder apps/application/ ./ ENTRYPOINT java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher
4.2 准备外网映射
由于我这里是在虚拟机上搭建的环境,为了能够在更新仓库代码时通过WebHook触发自动构建,需要进行外网映射,使用云服务器的小伙伴可以忽略此步骤。
由于只需要达到演示的效果,我这里使用的是免费的ngrok。下载地址:https://ngrok.com/download
# 安装snapd,才能使用snap安装ngrok apt install -y snapd # 安装ngrok snap install ngrok
如下图所示,表示已经安装成功。
这里需要注册一个ngrok的账号,才能获得authtoken。我这里已经注册好了,直接执行ngrok config add-authtoken xxx就行
# xxx为对应的token ngrok config add-authtoken xxx
现在我们将虚拟机服务器的8080端口映射出去。出现如下界面就表示映射成功。
ngrok http 8080
4.3 Jenkins任务配置
1)新建任务
Jenkins首页点击新建任务,选择构建一个maven项目。
2)Git配置
3)Gitee的webhook配置
我这儿勾选的是当仓库有推送代码事件时触发自动构建。
配置WebHook密码。
Gitee中添加WebHook。
4)编译、打包
5)编译、打包后执行后置脚本
我这儿准备了一个deploy.sh,并放在容器的/var/jenkins_home/sh目录下。
deploy.sh
#!/bin/bash # 服务名称 SERVER_NAME=$1 # 镜像tag IMAGE_TAG=$2 # 镜像名称 IMAGE_NAME=$SERVER_NAME:$IMAGE_TAG echo "------ 开始构建镜像:${SERVER_NAME} ------" docker build -t ${IMAGE_NAME} . echo "------ 镜像构建结束:${IMAGE_NAME} ------" if [[ -n $(docker ps -q -f "name=^${SERVER_NAME}#34;) ]];then echo "------ 容器正在运行:${SERVER_NAME} ------" echo "------ 停止容器:$SERVER_NAME ------" docker stop $SERVER_NAME echo "------ 删除容器:$SERVER_NAME ------" docker rm $SERVER_NAME else echo "------ 容器未在运行:${SERVER_NAME} ------" echo "------ 删除容器:$SERVER_NAME ------" docker rm $SERVER_NAME fi echo "------ 开始运行容器:$SERVER_NAME ------" docker run -d --name $SERVER_NAME -p 9090:9090 ${IMAGE_NAME} echo "------ 清理虚悬镜像 ------" if [[ -n $(docker images | grep "none" | awk "{print $3}") ]];then docker rmi -f $(docker images | grep "none" | awk "{print $3}") fi
4.4 手动部署
1)点击立即构建
2)查看日志
拉取代码。
编译、打包。
构建镜像、运行容器。
查看运行中的容器,jenkins-maven已成功运行。
4.5 自动部署
查看日志,拉取到最新的commit信息。
写在最后,纸上得来终觉浅,绝知此事要躬行。[奋斗]
关键词:
推荐阅读
核废水介绍 核废水对生态环境有哪些危害?
核废水介绍核废水由核电站产生。听起来是不是很高端,其实发电的原理和火电厂是一样的,只是一个是烧煤,一个是烧核。水烧开后,用蒸汽驱动 【详细】
阿波罗11号未解之谜 阿波罗11号登月证据是什么?
阿波罗11号未解之谜1969年7月16日,巨大的土星5号火箭载着阿波罗11号飞船从美国卡纳维拉尔角肯尼迪航天中心点火升空,开始了人类首次登月的 【详细】
大数据有什么用?大数据技术的应用领域介绍
大数据有什么用?大数据指的是在一定时间范围内不能被传统软件工具捕获、管理和处理的数据集。它是一种海量、高增长和多样化的信息资产,需 【详细】
验钞机什么牌子好?验钞机的价格介绍
验钞机什么牌子好?康艺康艺始于1994年。是行业标准的起草单位,其产品人民币外币柜台 清分机 复点机 捆钞机 扎把机 取款箱是研发康艺专业生 【详细】
苹果秋季发布会正式官宣 iPhone 12系列手机有什么型号?
苹果秋季发布会正式官宣昨晚,苹果正式宣布了秋季发布会的时间,线上会议将于9月16日凌晨1点举行。这也是今年在苹果举行的第二次线上会议, 【详细】
相关新闻
- 全球资讯:Docker+Jenkins+Gitee自动化部署maven项目
- 预算1500-2000元,618买什么手机好?这五款性能出色,买完不吃亏
- 中国物流行业,十年浩荡征程:十年蓄力,达到极高的效率和成本优势
- 焦点要闻:路由器是什么样的(路由器是什么样的设备?)
- 如何像一个成熟的成年人一样举办晚宴
- 太离谱!2天被咬32个包!很多福州人已崩溃
- 拇指“咔咔”响 当心腱鞘炎|环球观速讯
- 每日视点!爱若星辰歌词(爱若童话)
- 只有混双打到决胜局,孙颖莎单打能够竞争名额,参加奥运会比赛
- 张怡宁和富豪老公罕见合体,41岁的她青春依旧,把大20岁老公熬成爷爷辈 全球新资讯
- 反转!这是有关快速射电暴的新发现!
- 观点:“All in”新能源!红旗纯电车惊艳市场,未来可期!
- 特斯拉带头玩一体冲压式车身技术很强?天价维修费的账你算了没_今头条
- 要闻速递:宿舍环境卫生标语_环境卫生标语
- 环球看点!什么是试剂(化学试剂是什么)
- 家庭大五/六座SUV新标杆,魏牌“新摩卡/蓝山”登陆重庆车展
- 坚决遏制电信诈骗 江苏开展六大专项行动
- 共享非遗之美!“文化和自然遗产日”市图书馆文化体验大餐开启
- 打造零缺陷电缆丨浪潮人工智能工业质检“全家桶”重磅发布
- 全球通讯!什么是链动2+1模式?详解新型消费奖励机制