Jenkins docker打包部署

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Jenkins docker打包部署

CarinaYang   2022-09-28 我要评论

老板给了两台服务器,一台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包过来后就会自动启动脚本了

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们