一、准备工作

搭建jenkins
搭建git代码仓库
搭建harbor,做版本管理
应用服务器:安装docker服务

二、配置jenkins构建需要用到的工具及凭证

安装插件及工具

在jenkins页面安装插件:git、pipeline、gradle等

在jenkins服务器里安装需要的工具,并在jenkins页面配置:系统管理——全局工具配置——添加JDK、Git、Maven、Gradle

  JDK:跟项目使用的JDK版本一致

      

docker jenkins git docker jenkins gitlab harbor_docker

   Git:用来拉取git仓库的代码

    

docker jenkins git docker jenkins gitlab harbor_jar_02

   maven:编译maven项目需要用

    

docker jenkins git docker jenkins gitlab harbor_docker jenkins git_03

   gradle:编译gradle项目需要用

    

docker jenkins git docker jenkins gitlab harbor_jar_04

添加凭证

  系统管理——凭据配置——新增harbor、git仓库的用户名 密码

    

docker jenkins git docker jenkins gitlab harbor_docker jenkins git_05

   #将创建的用户唯一标识码复制到pipeline脚本中,避免直接用用户名密码,暴露信息出现安全隐患。

三、创建流水线项目

     

docker jenkins git docker jenkins gitlab harbor_docker jenkins git_06

进入项目进行配置:(项目是用gradle编译的,所以用gradle工具编译打包)

  #保存构建任务天数

  

docker jenkins git docker jenkins gitlab harbor_git_07

   #构建的时候选择构建代码分支

  

docker jenkins git docker jenkins gitlab harbor_git_08

   pipeline构建脚本:

#gradle编译jar包
#!/usr/bin/env groovy

def h_registry = "10.48.14.50"    #harbor仓库地址
def h_project = "dev"         #barbor项目名
def app_name = "eureka-service"    #java项目名
def jar_port = "8761"          #项目端口号
def jar_path = "build/libs"      #jar包路径
def jar_name = "${app_name}-0.0.1-SNAPSHOT.jar"    #jar包名
def image_name = "${h_registry}/${h_project}/${app_name}:${Branch}-${BUILD_NUMBER}"  #镜像保存在harbor仓库的名称
def git_address = "http://10.48.14.50:10080/001/leyitong.git"    #git仓库保存的项目地址
def git_auth = "76c181e8-d11c-42a0-93c5-14d623437d1c"        #git仓库凭证
def harbor_auth = "4102bab0-3376-465d-a47e-7a9d2822d21c"      #harbor凭证
def JAVA_OPTS = "-Xms128m -Xmx256m -Dfile.encoding=UTF8 -Duser.timezone=GMT+08 -Dspring.profiles.active=prod"  #设置JVM相关运行参数的变量
    
pipeline {
    agent any
    #注意:首次构建不会显示此参数,构建完成后才会显示
    parameters {
        choice choices: ['eureka-service', 'gateway-service', 'user-consumer'], name: 'app_name'
    }
    
    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '$branch']], userRemoteConfigs: [[credentialsId: "$git_auth", url: "$git_address"]]])
            }
        }
    
        stage('代码编译') {
            steps {
                sh  """
                    pwd
                    JAVA_HOME=/usr/local/jdk11
                    PATH=$JAVA_HOME/bin:/usr/local/gradle/bin:$PATH
                    cd ${app_name}
                    gradle -v
                    gradle clean build -x test
                    """
            }
        }
    
        stage('构建镜像') {
            steps {
                withCredentials([usernamePassword(credentialsId: "${harbor_auth}",passwordVariable: 'password',usernameVariable: 'username')]) {
                sh """
                    echo '
                        FROM  java:11
                        MAINTAINER liang
                        RUN apk add -U tzdata && \
                        ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
                        ADD ${jar_path}/${jar_name} /
                        EXPOSE ${jar_port}
                        CMD java -jar $JAVA_OPTS /${jar_name}
                        '> ${app_name}/Dockerfile
                    docker build -t ${image_name} ${app_name}
                    docker login -u ${username} -p ${password} ${h_registry}
                    docker push ${image_name}
                   """
                }
            }
        }
        stage('部署到docker') {
            steps {
                sh  """
            ssh 10.48.14.100    #需要生成秘钥,免密登录应用服务器  
                    docker run --name ${app_name} -p ${jar_port}:${jar_port} -d ${image_name} 
                    """
            }
        }
    }
}

注意:可以添加多个选项参数(选择项目代码、代码分支、应用服务器地址)

     

docker jenkins git docker jenkins gitlab harbor_docker_09

 然后生成指令,复制到pipeline脚本中,使用相应命令来调用此参数

四、查看构建结果

  

docker jenkins git docker jenkins gitlab harbor_jar_10

   登录docker应用服务器查看容器运行情况

    docker ps -a 

    docker logs 容器名

作者:等风来~~