docker中jenkins流水线式部署GitLab中springboot项目

本质就是将java项目拉取下来,并自动打包成docker镜像,运行

首先启动一个docker的jenkins

如果没有镜像使用我的镜像

通过网盘分享的文件:jenkins.tar 链接: https://pan.baidu.com/s/1VJOMf6RSIQbvW_V1zFD7eQ?pwd=6666 提取码: 6666

放入服务器随便目录,进入这个目录使用 docker load -i 镜像名称

创建jenkins的工作目录,拉取的代码已经下载的工具包都在这个目录下

#创建文件夹

mkdir -p /home/jenkins_home

#权限

chmod 777 /home/jenkins_home

运行jenkins

docker run -d \
  -u root \
  -p 9095:8080 \
  -p 50000:50000 \
  --name jenkins \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/jenkins_home:/var/jenkins_home \
  -v /etc/localtime:/etc/localtime \
  jenkins/jenkins:jdk17

#日志查看密码

docker logs jenkins

修改安装插件的下载源

cd /home/jenkins_home/

vi hudson.model.UpdateCenter.xml

中间的url换成这个清华大学镜像

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

重启镜像

docker restart jenkins

访问jenkins ip:9095

点击安装推荐插件

后面可创建一个root用户即安装完成

进入插件管理

将下方的插件全部装上

Maven Integration

Pipeline

Pipeline: Stage View

GitLab

Git

Publish Over SSH

上传Maven到jenkins

通过网盘分享的文件:apache-maven-3.6.1-bin.tar.gz

链接: https://pan.baidu.com/s/1GjwWRWUsC3qiZ7CQB_MA5g?pwd=6666 提取码: 6666

进入容器创建data目录,在退出容器

docker exec -it jenkins /bin/bash

mkdir /data

exit

将maven上传到服务器,在上传至jenkins容器内部

docker cp apache-maven-3.6.1-bin.tar.gz jenkins:/data

再次进入容器

docker exec -it jenkins /bin/bash

cd /data

tar -zxvf apache-maven-3.6.1-bin.tar.gz

apt-get update

apt-get install vim

vim /etc/profile #编辑配置文件

在配置文件最后一行输入这两行

maven

export MAVEN_HOME=/data/apache-maven-3.6.1

export PATH=MAVEN_HOME/bin:PATH

激活配置

source /etc/profile

maven下载依赖的仓库位置

vim /data/apache-maven-3.6.1/conf/settings.xml
<localRepository>/data/a</localRepository>

去data目录创建这个a文件夹

mkdir /data/a

maven下载依赖的地址如果在java代码中指定了仓库无需修改依赖下载地址,如果没做指定需要手动去修改下载地址

    <mirror>
        <id>aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

测试maven是否安装成功

设置软连接,jenkins默认从usr/bin目录找maven,不配永远找不到

ln -s /data/apache-maven-3.6.1/bin/mvn /usr/bin/mvn

ln -s /data/apache-maven-3.6.1/bin/mvn /usr/local/bin/mvn

mvn --version

创建一个home/webapps目录

mkdir /home/webapps

在容器中创建一个Dockerfile脚本,在home/webapps目录下

内容如下

用于build镜像,也可将这个配置文件放入java项目中,如何使用项目中的配置文件打包自行研究

FROM dockette/openjdk8:latest  #下面上传的jdk镜像名称
EXPOSE 8081
RUN mkdir -p /usr/local/java
# 挂载目录(可更换)
VOLUME /data/java
# 创建目录(可更换和上面保持一致)
RUN mkdir -p /data/java
# 指定路径(可更换和上面保持一致)
WORKDIR /data/java
ADD gd-patent-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT ["nohup","java","-jar","/app.jar"]

上传一个jdk的docker镜像

通过网盘分享的文件:jdk8.tar

链接: 百度网盘 请输入提取码 提取码: 6666

加载到docker中

docker load -i 镜像名称

容器安装docker

apt-get install -y docker.io

jenkins配置maven

文件地址是jenkins中的地址

配置服务器连接

测试是否成功

suess表示服务器连接成功

配置gitlab,在系统配置里

第一个填写项目git地址

第二个填写gitlab地址

第三个选择添加,添加apitoken

添加一个用户和token,两个都要,一个是用于用户唯一id,一个是拉取代码的权限token

,添加完用户这里无法选中,这里只能选择token,用户后面有操作需要

去gitlab生产token

http://ip/-/profile/personal_access_tokens

然后选择这个api token最后测试连接

复制用户唯一id

创建一个流水线项目,项目名称不要中文,我这边叫test,test名称很重要

注意每次重启jenkins加粗后都需要手动source /etc/profile,否则找不到mvn环境变量

找到Pipeline跟我一样勾选

将下面的代码复制过去

修改自己的用户唯一凭证id

更改gitlab地址ip

更改自己的项目打包名称

maven packing里面最后一行

sh 'cp /var/jenkins_home/workspace/test/target/${projectName}.jar /home/webapps'

这个是需要换的,test是自己创建的名称,可以自己进入容器的/var/jenkins_home/workspace/去看,然后找到target的目录在哪,有的项目打包后会在一些其他的主包下的target目录下,需要修改成对应的,自己找把目录复制过来

最后一行打包成docker镜像,运行的端口自己更改,我这里是38081

pipeline {
    agent any
    environment{
        DIR="/home/webapps"
        projectName="自己打包后的项目名称"
        tag="4"
    }
    stages {
        stage('pull git code') {
            steps {
                echo 'pull git code'
                git credentialsId: '填自己的用户凭证', url: 'http://自己的ip/project-delivery/guangde/gd-patent.git', branch: '选择分支'
            }
        }
        stage('maven packing'){
            steps {
                echo "maven打包"
                //sh 'source /etc/profile'
                //sh 'mv /opt/cp.sh /opt/cd.sh'
                sh 'pwd'
                sh 'mvn -v'
                sh 'mvn clean'
                sh 'mvn clean package'
                echo 'maven打包完成'
                sh 'cp /var/jenkins_home/workspace/test/target/${projectName}.jar /home/webapps'
            }
        }
        stage('docker build'){
            steps {
                sh 'cd /home/webapps && docker build -t guangde .'
                sleep 5
                sh 'pwd'
            }
        }
        stage('stop and remove old container'){
            steps {
                sh 'docker stop guangde || true'
                sh 'docker rm guangde || true'
            }
        }
        stage('docker run'){
            steps {
                sh 'docker run -d -p 38081:8081 --name guangde guangde'
            }
        }
    }
}

启动

build

查看日志

如果出现这个错误表示脚本没有权限,需要去放开权限

启动成功

高级写法

脚本里面的值是可以动态传递的

分支使用占位符

设置一个版本字符

勾选参数构建化过程,添加字符参数,名称就是动态的字符串名称,默认值就是具体值,根据需求添加更多的动态字符

相关推荐
c无序18 分钟前
Docker-技术架构演进之路
docker
White graces4 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
努力的小T4 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
枫叶落雨2225 小时前
08-Elasticsearch
运维·jenkins
东风微鸣5 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
奋斗的袍子0076 小时前
Spring AI + Ollama 实现调用DeepSeek-R1模型API
人工智能·spring boot·深度学习·spring·springai·deepseek
wolf犭良7 小时前
19、《Springboot+MongoDB整合:玩转文档型数据库》
数据库·spring boot·mongodb
小万编程7 小时前
基于SpringBoot+Vue奖学金评比系统(高质量源码,可定制,提供文档,免费部署到本地)
java·spring boot·后端·毕业设计·计算机毕业设计·项目源码
转身後 默落7 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三7 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes