Skip to content

已阅读

0%
Jenkins流水线部署Java项目

Jenkins流水线部署Java项目

Jenkins

Docker部署Jenkins并通过Jenkinsfile部署Java Spring项目

标签:
项目部署
发布于 2023年2月13日
更新于 2023年2月20日

Jenkins流水线部署Java项目

参考资料

json
{
  "title": "流水线",
  "desc": "TeamCity服务器 - 强大的持续集成和持续交付,开箱即用",
  "logo": "https://www.jenkins.io/apple-touch-icon.png",
  "link": "https://www.jenkins.io/zh/doc/book/pipeline/",
  "background": "#fff"
}
json
{
  "title": "流水线语法",
  "desc": "TeamCity服务器 - 强大的持续集成和持续交付,开箱即用",
  "logo": "https://www.jenkins.io/apple-touch-icon.png",
  "link": "https://www.jenkins.io/zh/doc/book/pipeline/syntax/",
  "background": "#fff"
}

部署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使用的名称相同

内容如下

plain
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内容如下

Dockerfile
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提交就进行从新部署,需要修改项目配置.

Last updated: