黑马程序员技术交流社区

标题: 【郑州校区】SpringBoot+GitLab+Docker+Jenkins实现持续集成 三 [打印本页]

作者: 我是楠楠    时间: 2020-4-30 10:36
标题: 【郑州校区】SpringBoot+GitLab+Docker+Jenkins实现持续集成 三
本帖最后由 我是楠楠 于 2020-4-30 10:38 编辑

【郑州校区】SpringBoot+GitLab+Docker+Jenkins实现持续集成 三

5. 编写SpringBoot项目
​        Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
​        接下来我们来编写一个最简单的SpringBoot入门项目。
5.1. POM文件
[AppleScript] 纯文本查看 复制代码
<?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.itheima</groupId>
        <artifactId>springboot_jenkins01</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>

        <!--所有的springboot工程都必须继承spring-boot-starter-parent-->
        <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.0.6.RELEASE</version>
                <relativePath/> <!-- lookup parent from repository -->
        </parent>

        <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
                <java.version>1.8</java.version>
        </properties>

        <dependencies>
                <!--web功能的起步依赖-->
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        </dependencies>

        <build>
                <plugins>
                        <plugin>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-maven-plugin</artifactId>
                        </plugin>
                </plugins>
        </build>
</project>

5.2. 核心配置文件application.properties
​        由于我们是基础入门项目,所以我们只需要新建一个application.properties文件放在resources目录下(当然不放置也是可以的),内容为空即可。
5.3. Controller类
[AppleScript] 纯文本查看 复制代码
package com.itheima.controller;

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

@RestController
public class QuickController {

    @GetMapping("/quick")
    public String quick(){
        return "欢迎使用 springboot !Jenkins";
    }
}

5.4. 引导类
[AppleScript] 纯文本查看 复制代码
package com.itheima;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootQuickApplication {

        public static void main(String[] args) {
                SpringApplication.run(SpringbootQuickApplication.class, args);
        }
}

5.5. 运行项目
​        我们运行引导类的main方法即可运行项目,此时控制台会输出如下日志,注意观察标红的部分,由于我们并没有进行任何的配置,项目自动运行在了端口号为8080的tomcat中,项目名也默认为“”。
我们在浏览器中输入"http://localhost:8080/quick",可以观察到下图的输出,这说明我们的项目已正常运行。
5.6. pom_docker_registry.xml
​        由于我们接下来会使用Jenkins把项目打包成Docker镜像,我们需要添加一个专门用于Docker的pom文件。内容为如下代码块:
[AppleScript] 纯文本查看 复制代码
<?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.itheima</groupId>
    <artifactId>springboot_jenkins01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--web功能的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>      
    </dependencies>

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--docker镜像相关的配置信息-->
                <configuration>
                    <!--镜像名,这里用工程名-->
                    <imageName>${project.artifactId}-${project.version}</imageName>
                    <!--Dockerfile文件所在目录-->
                    <dockerDirectory>
                        ${project.basedir}/src/main/resources
                    </dockerDirectory>
                    <!--TAG,这里用工程版本号-->
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <registryUrl>192.168.25.130:5000</registryUrl>
                    <pushImage>true</pushImage>
                    <imageName>
                        192.168.25.130:5000/${project.artifactId}:${project.version}
                    </imageName>
                    <!--构建镜像的配置信息-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>
                                ${project.artifactId}-${project.version}.jar
                            </include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
5.7. 配置Dockerfile
在resources目录下创建Dockerfile文件,该文件用于构建docker镜像,文件名称必须是Dockerfile。
[AppleScript] 纯文本查看 复制代码
FROM java:8
ENV ARTIFACTID springboot_jenkins01
ENV ARTIFACTVERSION 1.0-SNAPSHOT
ENV HOME_PATH /home
WORKDIR $HOME_PATH
ADD /$ARTIFACTID-$ARTIFACTVERSION.jar $HOME_PATH/$ARTIFACTID.jar
ENTRYPOINT ["java", "-jar", "springboot_jenkins01.jar"]
这一切都准备完毕之后,我们把项目push到上一节搭建好的GitLab中。
6. Jenkins
​        Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
6.1. 安装Jenkins6.1.1. 下载Docker镜像
[AppleScript] 纯文本查看 复制代码
docker pull jenkinsci/blueocean

6.1.2. 创建Docker容器
[AppleScript] 纯文本查看 复制代码
docker create --name jenkins -u root -p 8889:8080 --privileged=true -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /home/jenkins:/home docker.io/jenkinsci/blueocean

6.1.3. 启动Docker容器
[AppleScript] 纯文本查看 复制代码
docker start Jenkins

6.1.4. 访问Jenkins
在浏览器中输入http://192.168.25.130:8889,可以观察到下面的页面,第一次启动需要耐心的等待,时间比较久,另外还需要解锁密码,密码在下图标红的位置。
6.1.5. 进入容器查看密码
[AppleScript] 纯文本查看 复制代码
docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword


6.2. 配置Jenkins6.2.1. 插件安装
进入Jenkins中,我们可以进行插件的安装,先选择下图第一个选项即可。
6.2.2. 创建用户


6.2.3. 保存进入


6.2.4. 设置JDK、Maven、Git
进入【系统管理】,点击【全局工具配置】,设置JDK、Git和Maven,我们可以选择自动安装。
6.2.5. 设置全局凭据
根据下图我们设置下全局的凭据,注意此处要设置的是当前CentOS7的用户名和密码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2