使用Jenkins+docker打包部署后端服务的实现

 更新时间:2022年08月03日 08:49:25   作者:CarinaYang  
本文主要介绍了使用Jenkins+docker打包部署后端服务的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

老板给了两台服务器,一台windows用来打包,一台linux用于构建镜像 + 部署,于是有了这篇笔记

安装Jenkins

下载地址:https://www.jenkins.io/download/

找到对应版本下载安装就行,装好之后在浏览器输入localhost:port(port是你安装时设置的端口),看到如下页面:

就说明装好了,然后用安装的时候设置好的账号密码登录

配置

1、配置工具

进入页面后首先是添加maven的配置文件:

maven配置文件

然后配置工具:

jdk

git

maven

配置好之后应用保存

2、配置Publish over SSH

这一步是为了把文件推送到远程服务器,不需要的可以跳过

首先去插件商店安装publish over ssh

进入之后搜索publish over ssh,然后安装

安装完成后进入系统配置,拉到最下面,就可以看到publish over ssh的配置了

配置完之后同样应用保存

创建流水线打包

配置自动触发的条件,不勾就是手动触发咯

然后就是最重要的流水线语法了

可以点击这里帮助生成

下拉框那里,如果是linux命令选择sh:xxx
window命令选择bat:xxx
git命令选择git:xxx
publishSSH选择SSH Publishers:XXX

以下是我流水线示例:

pipeline {
    agent any 
    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'http://XXX.git']]])
                echo '拉取代码成功'
            }
        }
        stage('编译构建') {
            steps {
                //输出当前jenkins的工作目录
                echo "${env.WORKSPACE}" 
                //仅打包file-service模块
                bat 'mvn clean package -pl file-service -am'
                echo '编译成功'
            }
        }
        stage('推送jar包') {
            steps {
                sshPublisher(publishers: 
                    [sshPublisherDesc(
                        configName: 'ssh253', 
                        transfers: [sshTransfer(
                            cleanRemote: false, 
                            excludes: '', 
                            execCommand: '''cd local/file
                                        ./start.sh''', 
                            execTimeout: 120000, 
                            flatten: false, 
                            makeEmptyDirs: false, 
                            noDefaultExcludes: false, 
                            patternSeparator: '[, ]+', 
                            remoteDirectory: 'file', 
                            remoteDirectorySDF: false, 
                            removePrefix: 'file-service\\target\\', 
                            sourceFiles: 'file-service\\target\\file-service-1.0-SNAPSHOT.jar'
                        )], 
                        usePromotionTimestamp: false, 
                        useWorkspaceInPromotion: false, 
                        verbose: false
                    )])
            }
        }
    }
}

1、stage表示流水线每一步的名字,执行之后是这个样子:

2、拉取代码
credentialsId:你配置的凭证id
配置凭证

查看凭证

url:你的git项目地址

3、编译构建

使用maven进行打包的命令而已

4、推送jar包

我是用流水线语法生成器生成的

Source files: 要发送的源文件位置,表示当前工作空间下的file-service\target\file-service-1.0-SNAPSHOT.jar包,\是windows上的路径写法,如果要发送整个文件,则使用/* *
Remove prefix: 去除的前缀,表示只要文件不要目录,如果不去除,那么文件复制到服务器上后会生成file-service\target\目录
Remote directory: 远程机的路径,这个路径是以系统配置publish over ssh的Remote directory为当前文件夹的相对路径,开头不写/
Exec command文件推送完之后的命令

以上,流水线就做好了,点击“build Now”就可以打包并且推送到服务器对应位置上了

构建镜像

现在jar包已经有了,并且到了它该在的位置,需要来构建镜像并启动
安装docker
使用命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者:curl -sSL https://get.daocloud.io/docker | sh

编写dockerfile
docker需要使用dockerfile来构建镜像,先新建一个dockerfile文件

#jdk基础镜像
FROM anapsix/alpine-java:8_server-jre_unlimited

#作者
MAINTAINER CarinaYang

#执行命令,主要用来安装相关的软件
#RUN 

#添加文件
ADD admin-service-1.0-SNAPSHOT.jar /usr/local
#使用外面的配置文件
ADD admin-service.yml /usr/local

#挂载目录到容器
#VOLUME ["/data"]

#开放端口
EXPOSE 9000

#启动时执行的命令
CMD ["/bin/bash"]

ENV JAVA_OPTS="\
-Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M"

#启动时执行的命令
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar -Dspring.config.location=/usr/local/admin-service.yml /usr/local/admin-service-1.0-SNAPSHOT.jar

构建镜像
这里我是直接使用脚本来写的,创建脚本start.sh

#!/bin/bash
# 定义应用组名
group_name='springcloud'
# 定义应用名称
app_name='admin-service'
# 定义应用版本
app_version='1.0-SNAPSHOT'
echo '----停止消息服务 ----'
docker stop ${app_name}
echo '----删除实例----'
docker rm ${app_name}
echo '----删除旧镜像----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----打包镜像----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----启动镜像----'
docker run -itd -p 9000:9000 --restart=always  --name ${app_name}  ${group_name}/${app_name}:${app_version}
echo '----启动完成----'

docker run 里面的 --restart=always是为了开机自启动设置的,因为服务器每天晚上要关机,不需要可以不写
因为没有部署镜像仓库就直接启动镜像了,如果有的话要推到镜像仓库上去

启动脚本

./start.sh

当然,可以直接加到jenkins流水线“推送jar包”步骤的execCommand中,这样Jenkins推送jar包过来后就会自动启动脚本了

到此这篇关于使用Jenkins+docker打包部署后端服务的实现的文章就介绍到这了,更多相关Jenkins docker打包部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Docker cpu限制分析

    详解Docker cpu限制分析

    本篇文章主要介绍了Docker cpu限制分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 简单谈谈Docker镜像的使用方法

    简单谈谈Docker镜像的使用方法

    本次分享从个人的角度,讲述对于Docker镜像的使用方法,包括了从从Docker Hub或者其他镜像源安装Docker镜像,从Image file安装Docker镜像,从Docker file制作Docker镜像,有需要的小伙伴可以参考下
    2016-10-10
  • 解决docker加载新的镜像后repository和tag名称都为none的问题

    解决docker加载新的镜像后repository和tag名称都为none的问题

    这篇文章主要介绍了解决docker加载新的镜像后repository和tag名称都为none的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker 容器连接的具体实现

    Docker 容器连接的具体实现

    本文主要介绍了Docker 容器连接的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的方法

    Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的方法

    这篇文章主要介绍了Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Docke实例之搭建gitlab的方法

    Docke实例之搭建gitlab的方法

    本篇文章主要介绍了Docke实例之搭建gitlab的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • docker启动mysql并映射数据目录(含备份脚本)

    docker启动mysql并映射数据目录(含备份脚本)

    本文主要介绍了docker启动mysql并映射数据目录(含备份脚本),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Linux系统通过Docker安装SQL Server数据库

    Linux系统通过Docker安装SQL Server数据库

    这篇文章介绍了Linux系统通过Docker安装SQL Server数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Windows使用docker打开新窗口error解决办法

    Windows使用docker打开新窗口error解决办法

    这篇文章主要介绍了Windows使用docker打开新窗口error解决办法,十分简单,需要的朋友可以参考下。
    2017-09-09
  • Docker容器的Tengine实践

    Docker容器的Tengine实践

    Tengine是淘宝开发的基于nginx的应用服务器,反向代理服务器。它兼容nginx的所有配置,并且在其上增加了很多实用的功能,例如动态模块加载,集成lua语言进行扩展等,在性能方面有了比较大的改进。今天我们来看下在Docker下如何部署
    2016-06-06

最新评论