Loading... > # 通过Docker + Jenkins一键自动化部署 SpringBoot 项目 # 安装Docker <div class="tip inlineBlock info"> 在 CentOS 上安装 Docker 引擎。参考网站(docker官网):https://docs.docker.com/engine/install/centos/ </div> 要在 CentOS 上开始使用 Docker 引擎,请确保 [满足先决条件](https://docs.docker.com/engine/install/centos/#prerequisites),然后 [安装 Docker](https://docs.docker.com/engine/install/centos/#installation-methods)。 ### 卸载旧版本 旧版本的 Docker 被称为 `docker`或 `docker-engine`. 如果安装了这些,请卸载它们以及相关的依赖项。 ```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` `yum`如果报告没有安装这些软件包,那也没关系。 ### 安装方法 您可以根据需要以不同的方式安装 Docker Engine: * 大多数用户 [设置 Docker 的存储库](https://docs.docker.com/engine/install/centos/#install-using-the-repository)并从中安装,以便于安装和升级任务。这是推荐的方法。 ### 使用存储库安装 在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。 ### 设置存储库 安装 `yum-utils`包(提供 `yum-config-manager` 实用程序)并设置存储库。 ```bash sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo ``` ### 安装 Docker 引擎 1. 安装*最新版本*的 Docker Engine、containerd 和 Docker Compose 或进入下一步安装特定版本: ```bash sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` 如果提示接受 GPG 密钥,请验证指纹是否匹配 `060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35`,如果是,则接受它。 此命令会安装 Docker,但不会启动 Docker。它还会创建一个 `docker`组,但是默认情况下它不会将任何用户添加到该组中。 2. 启动 Docker。 ```bash sudo systemctl start docker ``` 3. 设置开机自启动 ```bash sudo systemctl enable docker ``` # 安装Jenkins 确保Docker安装成功,接下来使用Docker安装Jenkins。 ### 使用Docker 安装Jenkins <div class="tip inlineBlock success"> 本次没有使用Jenkins的默认端口,而是使用了自定义端口,大家可自行更换 </div> ```bash docker run --name jenkins `# 把容器名改为jenkins` \ -u root -d `# 后台运行` \ -p 9247:8080 `# 映射8080端口到实体机的9274端口,此端口为Jenkins的web服务端口` \ -p 65153:50000 `# 映射50000端口到实体机的65153端口,基于JNLP的Jenkins代理与Jenkins主机进行通信` \ -v /var/jenkins_home:/var/jenkins_home `# 映射实体机中的/var/jenkins_home到容器中的/var/jenkins_home` \ -v /var/run/docker.sock:/var/run/docker.sock `# 映射Docker进程的守护程序套接字` \ -v /usr/bin/docker:/usr/bin/docker `# 映射Docker可执行文件,方便在容器内执行docker命令` \ jenkins/jenkins:lts-jdk11 ``` ### 安装后设置向导 下载安装并运行Jenkins后,即将开始进入安装向导。 此安装向导会引导您完成几个快速“一次性”步骤来解锁Jenkins, 使用插件对其进行自定义,并创建第一个可以继续访问Jenkins的管理员用户。 ### 解锁 Jenkins 当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。 浏览到 [`http://服务器IP:9247`](`http://服务器IP:9247` "`http://服务器IP:9247`")(或安装时为Jenkins配置的任何端口),并等待 **解锁 Jenkins** 页面出现。 ![解锁Jenkins](https://ronins.cn/usr/uploads/2022/10/3084948361.png) ### 查看Jenkins默认管理员密码 在服务器上进入Jenkins容器内,命令: ```bash docker exec -it jenkins bash ``` 1.从Jenkins控制台日志输出中,复制自动生成的字母数字密码。 ```bash cat /var/jenkins_home/secrets/initialAdminPassword ``` ![查看解锁密码](https://ronins.cn/usr/uploads/2022/10/1675547020.png) 2.在 **解锁Jenkins** 页面上,将此 **密码** 粘贴到管理员密码字段中,然后单击 **继续** 。 ### 安装Jenkins插件 选择**安装推荐的插件**并等待安装完成 ![安装插件](https://ronins.cn/usr/uploads/2022/10/1881420019.png) ![等待安装插件](https://ronins.cn/usr/uploads/2022/10/2230046572.png) ### 创建用户 表单填写完成后,点击**保存并完成 ![创建用户](https://ronins.cn/usr/uploads/2022/10/567518293.png) ### 实例配置 确认无误后,点击**保存并完成** ![实例配置](https://ronins.cn/usr/uploads/2022/10/1983983319.png) ### 安装完成 进入最后一个页面,点击**开始使用Jenkins** ![开始使用Jenkins](https://ronins.cn/usr/uploads/2022/10/2493838362.png) ### Jenkins默认工作台 ![Jenkins默认工作台](https://ronins.cn/usr/uploads/2022/10/1804292801.png) # 配置Jenkins <div class="tip inlineBlock info"> Jenkins到这里就安装完成了,需要安装一些插件来支持后续操作 </div> ### 安装Jenkins插件 ![管理Jenkins插件](https://ronins.cn/usr/uploads/2022/10/1533992124.png) ### 安装所需插件 * 安装`Maven Integration` * 安装`Publish Over SSH` * 安装`Gitee` ![安装插件](https://ronins.cn/usr/uploads/2022/10/562055396.png) ### 重启Jenkins 在vps中输入命令重启Jenkins ```bash docker restart jenkins ``` 重启后,再次再浏览器登录Jenkins控制台 ### 配置JDK和Maven和Gitee 点击**系统管理**-**全局工具配置**准备安装JDK ![配置JDK,Maven,Gitee](https://ronins.cn/usr/uploads/2022/10/1747091861.png) #### 安装JDK <div class="tip inlineBlock info"> 这里使用Oracle JDK 所以需要登录Oracle官网让Jenkins自动下载JDK </div> 1.输入别名 2.选择自己所需要的jdk 3.点击**Please enter your username/password**在新打开的页面输入自己的Oracle账户及密码 4.保存 ![安装jdk](https://ronins.cn/usr/uploads/2022/10/1683535874.png) ![输入Oracle账户密码](https://ronins.cn/usr/uploads/2022/10/4081987307.png) #### 安装Maven 点击**系统管理**-**全局工具配置**准备安装Maven 下拉找到maven安装选项,输入**别名**,选择好maven版本号,点击保存 ![安装maven](https://ronins.cn/usr/uploads/2022/10/710382682.png) #### 配置Gitee 点击**系统管理**-**系统配置**准备安装配置Gitee ![配置gitee](https://ronins.cn/usr/uploads/2022/10/2704693436.png) <div class="tip inlineBlock info"> 此处需要Gitee API 获取地址为[https://gitee.com/profile/personal_access_tokens](https://gitee.com/profile/personal_access_tokens) </div> 在新的页签中输入上述Gitee API网址后,创建新的私人令牌 ![生成新令牌](https://ronins.cn/usr/uploads/2022/10/3169719824.png) 输入描述,点击**提交**按钮,生成令牌 ![生成令牌](https://ronins.cn/usr/uploads/2022/10/1976291175.png) <div class="tip inlineBlock error"> 复制令牌,此令牌只出现一次,切记!!! 复制令牌,此令牌只出现一次,切记!!! 复制令牌,此令牌只出现一次,切记!!! </div> ![令牌](https://ronins.cn/usr/uploads/2022/10/3473647741.png) 回到Jenkins配置页面,配置Gitee API ![配置令牌](https://ronins.cn/usr/uploads/2022/10/3089314541.png) 在弹出的页面中选择**Gitee API令牌**,并**粘贴复制好的令牌**,点击**保存** ![粘贴令牌](https://ronins.cn/usr/uploads/2022/10/3608413849.png) 保存后,点击页面左下角的保存按钮,保存上述配置 # 创建Jenkins任务 ### 新建任务 在首页,点击**新建任务** ![新建任务](https://ronins.cn/usr/uploads/2022/10/3605369401.png) 输入**任务名称**,选择**任务类型**,点击**确定**按钮 ![新建任务](https://ronins.cn/usr/uploads/2022/10/118820805.png) ### 配置任务 配置Gitee项目地址 ![配置项目地址](https://ronins.cn/usr/uploads/2022/10/1896189746.png) 点击**Credentials**下方的添加配置Gitee账号及密码,点击**确定** ![配置用户名密码](https://ronins.cn/usr/uploads/2022/10/1785909910.png) 配置好用户名密码后,并不会默认选择,手动选择刚才配置的用户名和密码策略,并点击左下角的**保存**按钮 ![选择密码](https://ronins.cn/usr/uploads/2022/10/2789372014.png) ### 配置构建方式 再次进入配置页面,在最下方找到**Build Steps**节点,选择**调用顶层 Maven 目标**选择好**maven版本**,**配置maven打包**命令,点击保存 ![构建maven包](https://ronins.cn/usr/uploads/2022/10/3909168699.png) ### 构建项目 回到项目首页,点击**立即构建**按钮,下方出现进度条,可点击查看构建日志 ![立即构建](https://ronins.cn/usr/uploads/2022/10/1224891829.png) ![构建项目](https://ronins.cn/usr/uploads/2022/10/4135891017.png) ![构建日志](https://ronins.cn/usr/uploads/2022/10/729463899.png) ### 配置打包docker镜像 #### 编写Dockerfile文件 1.进入目录`/var/jenkins_home/workspace/`+`项目名`目录,例如此项目是`/var/jenkins_home/workspace/springboot` 2.编写Dockerfile文件。在终端里执行命令 `vi Dockerfile` 创建文件 ```bash FROM openjdk:8 #使用openjdk8为基础镜像 VOLUME /tmp ADD target/admin-boot.jar app.jar #添加当前目录下的target/admin-boot.jar并改名为app.jar EXPOSE 8080 #告诉容器映射服务的8080端口 ENTRYPOINT ["java","-DBash.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=prod"] #Dockerfile执行脚本 ``` ### 配置Jenkins使其使用docker打包服务 进入到Jenkins的项目管理页面,点击**配置**在**Build Steps**节点里新增步骤,选择步骤为**执行 shell**输入docker构建命令,点击保存 ```bash cd /var/jenkins_home/workspace/springboot docker stop springboot-admin || true docker rm springboot-admin || true docker rmi springboot-admin || true docker build -t springboot-admin . docker run -d -p 6214:8080 --name springboot-admin springboot-admin:latest ``` ![请输入图片描述](https://ronins.cn/usr/uploads/2022/10/1122330507.png) #### 重新构建项目,查看应用是否启动成功 点击项目首页的**立即构建**按钮,等待一会查看构建日志。 ![构建完成](https://ronins.cn/usr/uploads/2022/10/373584758.png) #### 验证应用是否启动成功 ```bash curl --location --request POST 'http://服务器IP:6214/sys-dict/page' \ --form 'pageNum=1' \ --form 'pageSize=10' ``` ```json {"code":200,"success":true,"data":[{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":2,"parentId":null,"code":"1","dictKey":null,"dictValue":null,"sort":null,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580088387481907201,"parentId":0,"code":"b","dictKey":"b","dictValue":"bb","sort":2,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580088432453234690,"parentId":1,"code":"c","dictKey":"c","dictValue":"cc","sort":3,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580088850902167553,"parentId":0,"code":"d","dictKey":"d","dictValue":"dd","sort":4,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580088967411544066,"parentId":0,"code":"e","dictKey":"e","dictValue":"ee","sort":5,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580089551959212034,"parentId":0,"code":"f","dictKey":"f","dictValue":"ff","sort":6,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1580089633957855233,"parentId":0,"code":"g","dictKey":"g","dictValue":"gg","sort":7,"remark":null,"sealed":null},{"createBy":null,"createTime":null,"updateBy":null,"updateTime":null,"deleted":"0","status":"0","id":1581872176476254210,"parentId":0,"code":null,"dictKey":null,"dictValue":null,"sort":null,"remark":null,"sealed":null}],"msg":"操作成功"} ``` 最后修改:2023 年 03 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏