jenkins官网下载地址
linux下载页面
在这里插入图片描述
linux中

#直接启动jenkins  这样启动会在/root/.jenkins 下生成jenkins的文件目录
nohup java -jar jenkins.war --httpPort=8099 >/dev/null 2>&1 &

或是通过
service jenkins start

存放jenkins插件、配置以及所有项目文件目录 /root/.jenkins
存放jenkins的war包目录 /usr/lib/jenkins
jenkins端口地址存放目录 /etc/sysconfig

前提需要jdk、git、maven等环境
在Win10上运行下载的安装包,找到安装位置直接 start jenkins.exe

也可以自定义Dockerfile 和 docker-compose.yml
根据实际情况来编辑自己的docker文件

FROM jenkins/jenkins:2.319.1-lts    
COPY ./opt/maven3.6 /opt/maven3.6

执行 docker build -t jenkins:1 .

version: '3'
services:
  jenkins:
    image: 'jenkins:1'
    build: .
    container_name: jenkins
    restart: always
    ports:
      - '8099:8080'
      - '50000:50000'
    volumes:
      - /home/dockerjenkis/jenkins_home:/var/jenkins_home:rw
      - /home/dockerjenkis:/home:rw
      - /home/dockerjenkis/profile:/etc/profile:rw

或是直接在docker上边运行jenkins

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home:rw  jenkins/jenkins:2.319.1-lts

查看jenkins是否运行

docker ps -a

如果没有运行,我们可以查看报错信息

docker logs 

本人遇到的错误有这个
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

#这个是因为权限不够,我们直接把挂在的目录增加权限
chown -R 1000 /home/jenkins_home
#重新jenkins
docker start 

部署运行配置好开放的端口和登录用户账号密码

1.输入一开始设置的账号密码
在这里插入图片描述
jenkins的系统配置
在这里插入图片描述

2.配置jenkins的全局属性
在这里插入图片描述
3.maven配置文件
在这里插入图片描述

4.jdk的配置文件
在这里插入图片描述

5.git的安装地址
在这里插入图片描述
6.配置maven文件地址
在这里插入图片描述

7.进入jenkins部署自由风格
在这里插入图片描述

8.项目描述
在这里插入图片描述
9.git地址和git的账号密码

10.在打开页面输入git的账号密码
在这里插入图片描述

11.输入maven打包命令
在这里插入图片描述
12.点击执行流水线
在这里插入图片描述

13.查看控制台的打印信息
在这里插入图片描述
14.使用流水线发布项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以使用参数化构建
在这里插入图片描述
请注意 使用jenkins构建项目 在jenkins构建项目完成后会杀死所有的子进程,所以不能直接在流水线上java -jar 这样会导致项目直接被杀死
解决方法: JENKINS_NODE_COOKIE=dontkillme java -jar

pipeline {
    agent any

    stages {
        stage('pull project') {
            steps {
                echo '准备拉取代码'
                checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71d-438d-1851-31f93eb56ea4', url: 'https://gitee.com/xxxxxxxxx/javaApplication.git']]])
                echo '代码拉取成功'
            }
        }
        stage('使用maven打包') {
            steps {
                sh '''
                    pwd
                    mvn -pl ${name} -am clean package -Dmaven.test.skip=true'''
            }
        }
        stage('运行 jar 包') {
            steps {
                sh '''cd ${name}/target
                        pwd
                        pid=`ps -ef | grep -w ${name} | grep -v grep | grep -v /bin/bash | awk \'{print $2}\'`
                        jar=`ls -ll | grep -w ${name} | grep -v original | awk \'{print $9}\'`
                        if [[ -n ${pid} ]]
                        then
                        kill -9 ${pid}
                        else
                        echo "未找到该服务"
                        fi
                        echo "即将重启 ${name} 服务"
                        JENKINS_NODE_COOKIE=dontkillme nohup java -jar ${jar} >/dev/null 2>&1 &
                        echo "运行成功!"
                        '''
            }
        }
    }
}

在这里插入图片描述
同样我们可以在我们的java项目的根目录里增加一个Jenkinsfile的文件,文件内容就是我们上边的流水线执行代码,然后选择流水线执行方式
在这里插入图片描述

可以设置各种触发器,例如我选中的这种,直接是通过浏览器或其他地方调用就可以触发构建
在这里插入图片描述

jenkins + docker + docker-compose发布项目

  1. 我的jenkins构建后项目在/root/.jenkins下边
  2. 我的Dockerfile、docker-compose.yml、各种脚本文件在/home/projects下边

编辑shell —> entrypoint.sh 脚本

#!/bin/sh

exec java ${JAVA_OPTS} -jar javaApplication.jar "$@"

编辑 jenkins构建命令

pipeline {
    agent any

    stages {
        stage('pull project') {
            steps {
                echo '准备拉取代码'
                checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71f-438d-485q-31f93eb56ea4', url: 'https://gitee.com/xxxxxxxx/javaApplication.git']]])
                echo '代码拉取成功'
            }
        }
        stage('build project准备') {
            steps {
                echo '准备打包项目'
                sh 'mvn clean package -Dmaven.test.skip=true'
                echo '项目打包成功'
                sh 'pwd'
                echo '项目地址'
            }
        }
        stage('删除容器') {
            steps {
                sh '''containerId=`docker ps -a | grep javaapplication | awk \'{print $1}\'`
                echo "容器id : " ${containerId}
                if [[ -n ${containerId} ]]
                  then
                    docker rm -f ${containerId}
                    echo "容器已退出"
                  else
                    echo "暂无启动容器"
                fi
                '''
            }
        }
        stage('docker制作镜像') {
            steps {
                sh '''contanerId=`docker images | grep -w javaapplication | grep -v / | awk \'{print $3}\'`
                cd /home/projects
                rm -rf *.jar
                cp /root/.jenkins/workspace/java_pipeline/target/*.jar /home/projects
                if [[ -n ${contanerId} ]]
                  then 
                    docker rmi -f ${contanerId}
                    echo "镜像已删除"
                  else
                    echo "暂无该镜像"
                fi
                
                cat << EOF > Dockerfile
                FROM java:8
                
                WORKDIR /home
                
                ENV JAVA_OPTS="-Xmx500m -Xms500m"
                
                COPY entrypoint.sh entrypoint.sh
                
                RUN chmod 755 entrypoint.sh
                
                COPY javaApplication.jar javaApplication.jar
                
                ENTRYPOINT ["./entrypoint.sh"]
                

                
                '''
            }
        }
        stage('制作docker-compose.yml') {
            steps {
                sh '''
                cd /home/projects
                docker build -t javaapplication:1 .
                echo "镜像制作成功"
                cat << EOF > docker-compose.yml
                version: "3"
                services: 
                  java: 
                    build: .
                    container_name: javaapplication
                    image: javaapplication:1
                    ports: 
                      - 8083:8083
                    volumes:
                      - /home/projects:/home:rw
                    environment: 
                      - JAVA_OPTS=-Xms512m -Xmx512m -XX:+UseParallelOldGC

                '''
            }
        }
        stage('使用docker-compose发布镜像') {
            steps {
                sh '''
                cd /home/projects
                docker-compose up -d
                
                runId=`docker ps | grep javaapplication | awk \'{print $1}\'`
                
                if [[ -n ${runId} ]]
                  then 
                    echo "容器启动成功"
                  else
                    echo "容器启动失败"
                fi'''
            }
        }
        
    }
}

或者直接将docker的作为一个流水线的一个整体编写

pipeline {
    agent any
    

    stages {
        stage('从Git上拉取项目') {
            steps {
                echo "准备拉取项目"
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ebd014ce-d71f-438d-9851-31f93eb56ea4', url: 'https://gitee.com/XXXXXXX/javaApplication.git']]])                
                echo "项目拉取成功"
            }
        }
        stage('使用maven打包项目') {
            steps {
                sh 'mvn clean package -Dmaven.test.skip=true'                
            }
        }
        stage('使用docker-compose发布项目') {
            steps {
                sh '''containerId=`docker ps -a | grep -w javaapplication | grep -v / | awk \'{print $1}\'`

if [[ -n ${containerId} ]]
  then 
     docker rm -f   ${containerId} 
     echo 容器删除成功
   else
     echo 没有正在运行的容器
fi

imageId=`docker images | grep -w javaapplication | grep -v / | awk \'{print $3}\'`
if [[ -n ${imageId} ]]
  then 
     docker rmi -f ${imageId} 
     echo 镜像删除成功
   else
      echo 没有这个镜像
fi

cd /home/projects
rm -rf *.jar
cp /root/.jenkins/workspace/springbootProject/target/*.jar /home/projects/

cat << EOF > Dockerfile
FROM java:8
WORKDIR /home
ENV JAVA_OPTS="-Xms500m -Xmx500"
COPY javaApplication.jar javaApplication.jar
ENTRYPOINT ["sh","-c","java -jar \\${JAVA_OPTS} javaApplication.jar "]
EOF

docker build -f Dockerfile -t javaapplication:1 .

cat << EOF > docker-compose.yml
version: "3"
services:
    javaapplication:
       image: javaapplication:1
       container_name: javaapplication
       build: .
       ports:
           - 8083:8083
       volumes: 
           - /home/projects:/home:rw
       environment:
           - JAVA_OPTS=-Xms512m -Xmx512m 
EOF

docker-compose up -d'''
            }
        }
    }
}

使用 docker images 命令查看发布的镜像
在这里插入图片描述

使用 docker ps -a 命令查看运行的容器
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐