系列学习 Jenkins 之第 4 篇 —— 亲测成功 Jenkins + Gitee + Docker 实现自动化部署微服务项目(完结)

查看之前的博客可以点击顶部的【分类专栏】

 

本篇博客是博主历经 6 个小时研究出来的,在 CentOS7 上部署 Jenkins,然后拉取 Gitee 的项目,将 SpringBoot 项目打成 Docker 包发布。有很好的参考价值!亲自操刀实践,实践出真知!

说明:

1、Jenkins 的安装环境,以及 JDK、Maven、Git 请查看之前的博客,可以点击顶部的【分类专栏】,否则容易出问题。

2、本篇博客使用的 Gitee 项目地址:https://gitee.com/biandanLoveyou/linux-test-project.git

代码结构:就4个主要文件。

 

pom.xml。注意这里的 finalName 我们使用的是 artifactId 的值。

<?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>

    <groupId>com.study</groupId>
    <artifactId>my-test</artifactId>
    <version>1.0.1.RELEASE</version>
    <packaging>jar</packaging>
    <description>这是我的第一个 Gitee 自动部署项目</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.8.RELEASE</version>
    </parent>

    <dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <configuration>
                    <!--这里指定打包镜像的名称-->
                    <repository>${project.artifactId}</repository>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Dockerfile

#依赖基础镜像
FROM java:8
#镜像作者
MAINTAINER biandan
#执行脚本/命令
#RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#卷
VOLUME /tmp
ARG JAR_FILE
#复制文件 jar包  镜像名
ADD ${JAR_FILE} /my-test.jar
#参数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/my-test.jar"]
# 时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

注意 Dockerfile 的文档格式是:LF,在 Linux 下是可以识别的。之前做项目的时候,Dockerfile 的格式是 CRLF,一直排查不出问题,也是个坑,要注意!

 

控制层。

package com.study.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author biandan
 * @description
 * @signature 让天下没有难写的代码
 * @create 2021-06-16 下午 7:34
 */
@RestController
public class MyController {

    SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @GetMapping("/")
    public String index() {
        return "现在是北京时间:" + SDF.format(new Date());
    }

}

没有 properties 、yml 配置文件,因此 SpringBoot 项目是默认使用 8080 端口的。这个要清楚。OK,继续往下看。

 

 

实现自动化部署 Docker 项目

1、新建 Item

2、输入任务名称,选择【构建一个maven项目】,确定。这个名字随便起,顾名思义就行啊。

 

3、增加一些描述,勾选【Discard old builds】丢弃旧的构建。

 

4、源码管理。点击 Git。然后输入 Gitee 的仓库的 https 地址。在 Credentials 那里,我们点击添加。

 

我们选择【类型】是 Gitee API 令牌,是我们上面提到的。

这个令牌去哪里找呢?可以看到下面的提示地址:https://gitee.com/profile/personal_access_tokens

然后输入密码验证通过就可以获取令牌了。

如果 git仓库是自己所有的话就填写自己 Gitee 的账号和密码(仓库的成员也可),否则要填写仓库成员或仓库拥有着的gitee账号和密码。

没有报红色就表示能通过。

 

5、构建触发器

这里勾选【Gitee webhook】构建触发器,然后把我么的 URL 复制,粘贴到 Gitee webhook 中。同时,在这个页面生成 Webhook 密码。

 

往下拉,生成 webhook 密码:

 

我们打开 Gitee 官网,找到我们对应的仓库,默认进入的是 【代码】,我们点击后面的【管理】,找到 webhook,输入 URL和密码。

点击底部的【添加】,报错:URL域名不正确,请输入包含正确【域名】或者【公有IP】的 http 地址。

也就是说,我们不能通过局域网的 IP 进行添加了。我们又没有域名,怎么办?一把来说,在公司里是有专门的外网域名的,到时候我们直接配置上就OK了。

我们可以通过百度查找本机的 IP

 

这样就能提交成功了。但是当我们提交代码到 Gitee 上时,Gitee 还不能自动的推送消息给 Jenkins,因为 Gitee 目前还没能发送请求到达我们本机的 Jenkins。只能我们本机的 Jenkins 去请求 Gitee 上的项目资源。实际项目中,应该是提交代码到一个分支,然后有专门的人员从分支合并到主 master 上,这样就能推送到 Jenkins 自动部署了。

 

6、Pre Steps

在 Pre Steps 中,Root POM 是我们项目最外层的 pom.xml 文件,默认不用改。然后 Goals and options 就输入【clean package -Dmaven.test.skip=true】。如果你的项目还被别的项目依赖,建议再加一个 install,这样别的项目就能在 maven 仓库中找到你打的 jar 包了。

 

7、Post Steps

我们添加一个 Execute shell,用来执行 shell 脚本,如图:

 

然后勾选【Run only if build succeeds】,只在成功构建时才执行 shell 脚本。 

这里给出 shell 脚本:注意:需要修改 SERVER_NAME(微服务名称,就是 pom.xml 里面定义的 name 属性) SERVER_PORT

# 定义SERVER_NAME(对应 pom.xml 的 artifactId 值)和SERVER_PORT(微服务的端口,不指定就默认8080)
SERVER_NAME=my-test
SERVER_PORT=8080

# 停止和删除docker容器
echo "stop and delete container"
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
if [ -n "$CID" ]; then
echo "has container,CID=$CID"
docker stop $CID
docker rm $CID

fi
echo "build docker image"
mvn dockerfile:build
echo "current docker images:"
docker images | grep $SERVER_NAME
echo "start container----->"
# 微服务的端口映射到 docker 容器的 80 端口
docker run -d -p 80:$SERVER_PORT --name $SERVER_NAME $SERVER_NAME
echo "start success!"

配置完毕,别忘记最后的保存!

 

 

7、验证

1、我们先在 Jenkins 下验证,看下有什么问题。

 

查看构建历史:

报红色表示失败,蓝色表示成功。

如果报红,就点击控制台查看输出信息:

点击某一次构建的信息:

或者:

然后找到左边的【控制台输出】

 

看到控制台的输出信息如下:

如果是第一次构建,那要挺久的,估计3分钟。前提是还根据我之前的博客配置了阿里云镜像,否则慢得难受!

这时候,我们就可以打开浏览器见证奇迹了!http://192.168.0.105/    (根据你的虚拟机IP和你配置的docker映射端口,如果按照我的配置,默认不需要输入端口号)

 

然后,可以继续测试。你本地提交代码(或者去 Gitee 仓库修改代码),然后重新构建。一般在公司里开发,基本不会说提交代码就直接构建,除非那个人运维人员或者管理员,普通的程序员怎么可能有这种权限呢?

 

然后重新构建。查看效果:

 

没毛病,老铁们!原创不易,多谢支持!

 

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值