Jenkins流水线部署Java项目

本文最后更新于:6 个月前

Jenkins流水线部署Java项目

参考资料

流水线
TeamCity服务器 - 强大的持续集成和持续交付,开箱即用
流水线语法
TeamCity服务器 - 强大的持续集成和持续交付,开箱即用

部署jenkins到docker

参考改文章

配置Jenkins

需要安装docker插件Docker插件介绍,可以通过jenkins自动安装插件Manage Jenkins->Plugin Manage->installed plugins也可以手动安装该插件Manage Jenkins->Plugin Manage->Advanced settings->Deploy Plugin,将这里下载最新的插件或者其他版本的该插件进行上传安装
推荐更换插件下载源Manage Jenkins->Plugin Manage->Advanced settings->Update Site->https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

如图点击 New Item

图一

如图先输入项目名称,选择Pipeline然后点击ok

图二

然后依次如下图操作

  • Description:输入项目描述
  • Pipeline->Definition:选择Pipeline script from SCM
  • SCM:选择git
    • Repositories
      • Repository URL:git地址
      • Credentials:选择git账户
    • Branches to build
      • Branch Specifier (blank for ‘any’):选择分支例如*/dev;*/master
      • Repository browser:选择自动(AUTO)
    • Script Path:输入Jenkinsfile文件地址,存放在项目根目录下直接填写Jenkinsfile即可,如果文件名发生改动,也请将此处修改为文件名称
  • 最后点击保存即可

图三

图四

图五

添加git账号

图六

点击Add

图七

如下

  • Kind:选择Username with password,当然也可以选择其他方式
    • Scope:Global
    • Username:git账户
    • Password:git对应账户密码
    • Treat username as secret:是否屏蔽用户名
    • ID:一个内部唯一 ID,通过它可以从作业和其他配置中识别这些凭据。通常留空,在这种情况下将生成一个 ID,这适用于使用可视化表单创建的作业。在使用脚本配置中的凭据时明确指定很有用。
    • Description:帮助区分相似凭据的可选描述。

图八

编写Jenkinsfile

在项目根目录下新建Jenkinsfile文件

Jenkinsfile名称需要与上面 Script Path使用的名称相同

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pipeline {
agent any
options {
timeout(time: 15, unit: 'MINUTES')
}
stages {
stage ('Start Package'){
options { skipDefaultCheckout() }
agent {
docker {
reuseNode 'true'
image 'maven:3.8.6-openjdk-8-slim'
args '-v /tool/maven/.m2:/root/.m2 -v /tool/maven/conf:/usr/share/maven/conf'
}
}
steps {
sh 'mvn clean package -Dmaven.test.skip=true -P prod'
}
}
stage('Docker build and run') {
options { skipDefaultCheckout() }
steps {
sh 'docker stop ws-mechanism|| true && docker rm ws-mechanism || true && docker rmi ws-mechanism:latest || true '
sh 'docker build -t ws-mechanism:latest -f Dockerfile .'
sh 'docker run -itd --restart=always --network=share_net -p 16060:16060 --name ws-mechanism -v /logs/ws-mechanism:/ws-mechanism/log.path_IS_UNDEFINED ws-mechanism:latest'
}
}
stage('Docker clean') {
options { skipDefaultCheckout() }
steps {
sh 'echo y|docker image prune'
sh 'echo y|docker volume prune'
}
}
}
}

解释1:

  1. timeout:设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。例如: options { timeout(time: 1, unit: ‘HOURS’) }
  2. skipDefaultCheckout:在agent 指令中,跳过从源代码控制中检出代码的默认情况。例如: options { skipDefaultCheckout() }
  3. docker:使用给定的容器执行流水线或阶段
    1. reuseNode:一个布尔值, 默认为false。 如果是true, 则在流水线的顶层指定的节点上运行该容器, 在同样的工作区, 而不是在一个全新的节点上.
    2. image:镜像名称
      1. maven:3.8.6-openjdk-8-slim:使用和开发环境相同的版本镜像
    3. args:参数,该参数可能包含直接传递到 docker run 调用的参数
      1. -v /tool/maven/.m2:/root/.m2 -v /tool/maven/conf:/usr/share/maven/conf:挂载maven的配置文件和下载的jar包,提升编译速度
  4. steps:执行的命令

解释2:

  1. mvn clean package -Dmaven.test.skip=true -P prod:打jar包
  2. sh ‘docker stop ws-mechanism|| true && docker rm ws-mechanism || true && docker rmi ws-mechanism:latest || true ‘:停止并删除镜像
  3. sh ‘docker build -t ws-mechanism:latest -f Dockerfile .’通过Dockerfile打包image
  4. sh ‘docker run -itd –restart=always –network=share_net -p 16060:16060 –name ws-mechanism -v /logs/ws-mechanism:/ws-mechanism/log.path_IS_UNDEFINED ws-mechanism:latest’:运行docker run

Dockerfile内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM moxm/java:1.8-full

RUN mkdir -p /ws-mechanism

WORKDIR /ws-mechanism

ARG JAR_FILE=./ws-admin/target/ws-admin.jar

COPY ${JAR_FILE} app.jar

EXPOSE 16060

ENV TZ=Asia/Shanghai

CMD sleep 30; java -jar app.jar

启动

进入到刚刚Jenkins创建的项目点击Build Now进行首次构建,或者打开Blue Ocean进行构建,图示为打开Blue Ocean

图九

通过点击运行进行构建,构建成功如图,每一个stage都是一个节点,该图示通过打两次不同环境的配置文件,在同一个docker中部署两个不同环境的相同项目

图十

构建失败可以通过如图方式进行查看

图十一

图十二

该错误为Jenkinsfile语法错误

结语

每次提交git后,通过登录jenkins手动构建新的镜像从而运行项目,也可以通过自动方式检测到git提交就进行从新部署,需要修改项目配置.


Jenkins流水线部署Java项目
https://crudclass.github.io/2023/02/13/Jenkins/JavaFlowline/
作者
Zero
发布于
星期一, 二月 13日 2023, 4:42 下午
更新于
2023年2月20日
许可协议