一、创建项目
使用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的。