使用jenkins实现CI操作

本文详细介绍了如何使用IntelliJIDEA创建一个基于SpringBoot的Java项目,推送到GitLab,配置Jenkins进行持续集成,包括设置JDK和Maven路径,创建JDK17的Docker镜像并推送到私有仓库,以及编写Dockerfile和docker-compose.yaml文件以实现应用的容器化部署。最后,通过Jenkins自动化构建并测试了项目,成功在服务器上运行了应用。
摘要由CSDN通过智能技术生成

一、创建项目

使用idea开发工具创建mytest项目,jdk使用17版本,maven使用3.8.7版本,并配置阿里云仓库。

mytest项目代码如下:

package zhaoll.mytest.controller;

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

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        return "Hello Jenkins!";
    }
}

结构如下:
在这里插入图片描述

二、推送到gitlab

我的gitlab项目地址是http://11.0.1.11:18080/root/mytest.git

三、jenkins配置

1、添加jdk17和maven的路径

2、添加ssh服务器,因为我们要部署到远程服务器

四、创建jdk17的容器镜像

首先在linux服务器上下载jdk-17_linux-x64_bin.tar.gz包,然后创建一个Dockerfile文件

代码如下:

FROM centos:7

WORKDIR /data

RUN mkdir /usr/java/
ADD jdk-17_linux-x64_bin.tar.gz /usr/java/
CMD ["yum install -y iputils"]

ENV JAVA_HOME /usr/java/jdk-17.0.6
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
ENV LANG en_US.UTF-8

RUN /bin/sh -c set -ex

RUN chmod 755 -R /usr/java/jdk-17.0.6

CMD ["java -version"]
CMD ["jshell"]

构建镜像:

# docker build -t jdk:17
Sending build context to Docker daemon  1.312GB
Step 1/14 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/14 : WORKDIR /data
 ---> Running in 7f87989f617e
Removing intermediate container 7f87989f617e
 ---> e7a213863b67
Step 3/14 : RUN mkdir /usr/java/
 ---> Running in 4d3e1162de67
Removing intermediate container 4d3e1162de67
 ---> 9c892198a59f
Step 4/14 : ADD jdk-17_linux-x64_bin.tar.gz /usr/java/
 ---> ff1774891875
Step 5/14 : CMD ["yum install -y iputils"]
 ---> Running in a9a5d7c7a35e
Removing intermediate container a9a5d7c7a35e
 ---> c7cf3680bf47
Step 6/14 : ENV JAVA_HOME /usr/java/jdk-17.0.6
 ---> Running in f9138e45be6c
Removing intermediate container f9138e45be6c
 ---> cfa8baee10c0
Step 7/14 : ENV JRE_HOME $JAVA_HOME/jre
 ---> Running in 563e73c72dfc
Removing intermediate container 563e73c72dfc
 ---> f45ce18328b7
Step 8/14 : ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH
 ---> Running in 74feedc60316
Removing intermediate container 74feedc60316
 ---> aa4ee0f40821
Step 9/14 : ENV PATH $JAVA_HOME/bin:$PATH
 ---> Running in 71c1d6c49de6
Removing intermediate container 71c1d6c49de6
 ---> d15370998992
Step 10/14 : ENV LANG en_US.UTF-8
 ---> Running in 2abd9d9d1c54
Removing intermediate container 2abd9d9d1c54
 ---> 3e944c911d7e
Step 11/14 : RUN /bin/sh -c set -ex
 ---> Running in c5ec2a2f90fb
BASH=/bin/sh
BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
CLASSPATH=/usr/java/jdk-17.0.6/bin/dt.jar:/usr/java/jdk-17.0.6/lib/tools.jar:/usr/java/jdk-17.0.6/lib:
DIRSTACK=()
EUID=0
GROUPS=()
HOME=/root
HOSTNAME=c5ec2a2f90fb
HOSTTYPE=x86_64
IFS=' 	
'
JAVA_HOME=/usr/java/jdk-17.0.6
JRE_HOME=/usr/java/jdk-17.0.6/jre
LANG=en_US.UTF-8
MACHTYPE=x86_64-redhat-linux-gnu
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/java/jdk-17.0.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
POSIXLY_CORRECT=y
PPID=0
PS4='+ '
PWD=/data
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=2
TERM=dumb
UID=0
_=/bin/sh
Removing intermediate container c5ec2a2f90fb
 ---> e6b76c6204d7
Step 12/14 : RUN chmod 755 -R /usr/java/jdk-17.0.6
 ---> Running in 655d1101edeb
Removing intermediate container 655d1101edeb
 ---> 4e80837f22f4
Step 13/14 : CMD ["java -version"]
 ---> Running in f1fe8f5ca772
Removing intermediate container f1fe8f5ca772
 ---> cc0ddbcc3a7d
Step 14/14 : CMD ["jshell"]
 ---> Running in beef6a6efaa1
Removing intermediate container beef6a6efaa1
 ---> 3b02a2cb7fa6
Successfully built 3b02a2cb7fa6
Successfully tagged jdk:17

因为用的是centos做的底层镜像,所以比较臃肿。

重新给镜像打标签,并推送到自己的私有仓库:

# docker tag jdk:17 11.0.1.13:18080/java/jdk:17
# docker push 11.0.1.13:18080/java/jdk:17

五、创建mytest项目的Dockefile和docke-compose.yaml文件,内容如下:

Dockerfile:

FROM 11.0.1.13:18080/java/jdk:17
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

docker-compose.yaml:

version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v2.0
    container_name: mytets
    ports:
      - 8081:8080

五、创建Jenkins项目

1、选择创建名为mytest的FreeStyle的空白项目

2、源码管理:

在这里插入图片描述

3、Build Steps

在这里插入图片描述

4、构建后操作

在这里插入图片描述
在这里插入图片描述

保存即可。

六、测试

在Jenkins的项目内点击“Build on now”,开始编译,然后进入控制台查看结果

Started by user admin
Running as SYSTEM
Building in workspace /root/.jenkins/workspace/mytest
The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /root/.jenkins/workspace/mytest/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://11.0.1.11:18080/root/mytest.git # timeout=10
Fetching upstream changes from http://11.0.1.11:18080/root/mytest.git
 > git --version # timeout=10
 > git --version # 'git version 1.8.3.1'
 > git fetch --tags --progress http://11.0.1.11:18080/root/mytest.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 2bd3a31b11bea55dbf467a68c50c1fc355dd4e9a (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 2bd3a31b11bea55dbf467a68c50c1fc355dd4e9a # timeout=10
Commit message: "Dockerfile"
 > git rev-list --no-walk b2c791bdac74024878dc0802e3c860622e2515b5 # timeout=10
[mytest] $ /usr/local/maven/bin/mvn clean package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< zhaoll:mytest >----------------------------
[INFO] Building zhaoll 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.2.0:clean (default-clean) @ mytest ---
[INFO] Deleting /root/.jenkins/workspace/mytest/target
[INFO] 
[INFO] --- maven-resources-plugin:3.3.0:resources (default-resources) @ mytest ---
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ mytest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /root/.jenkins/workspace/mytest/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:3.3.0:testResources (default-testResources) @ mytest ---
[INFO] skip non existing resourceDirectory /root/.jenkins/workspace/mytest/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ mytest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /root/.jenkins/workspace/mytest/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ mytest ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.3.0:jar (default-jar) @ mytest ---
[INFO] Building jar: /root/.jenkins/workspace/mytest/target/mytest.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:3.0.2:repackage (repackage) @ mytest ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  20.695 s
[INFO] Finished at: 2023-02-02T23:33:26+08:00
[INFO] ------------------------------------------------------------------------
SSH: Connecting from host [jenkins]
SSH: Connecting with configuration [11.0.1.12] ...
SSH: EXEC: completed after 6,113 ms
SSH: Disconnecting configuration [11.0.1.12] ...
SSH: Transferred 3 file(s)
Finished: SUCCESS

上面可以看到编译完成,到服务器上查看镜像已经生成:

REPOSITORY                 TAG       IMAGE ID       CREATED             SIZE
mytest                     v2.0      b5dc0c1033be   3 minutes ago       856MB
11.0.1.13:18080/java/jdk   17        3b02a2cb7fa6   About an hour ago   837MB

容器也在运行:

[root@jenkins docker]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                                       NAMES
6d7fe39ddb03   mytest:v2.0   "/bin/sh -c 'java -j…"   5 minutes ago   Up 5 minutes   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp   mytets

通过浏览器测试访问http://11.0.1.12:8081/test 结果如下:
在这里插入图片描述

结果是OK的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dustin.Hoffman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值