跳转到主要内容

jenkins&&docker安装

核心点是3个主要挂载的,socker.sock需要根据情况定,需要以root身份运行


version: '3'
services:
  jenkins:
    image: harbor.iovhm.com/hub/jenkins/jenkins:2.477-jdk17
    container_name: jenkins
    restart: always
    privileged: true
    user: root
    ports:
      - "8080:8080"
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - ./m2:/root/.m2
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker



准备工作

需要先建立拉取代码和推送docker镜像使用的用户名密码凭据

系统管理 > 凭据管理 > 全局 > Add Credentials

springboot maven Pipeline


pipeline {
    agent any

    // 环境变量,全局可用
    environment {
        // 项目名称,将生成docker镜像的名称的一部分
        PROJECT_NAME    ="springboot-demo"
        // docker仓库的分组名称
        PROJECT_NS      ="vp-whdev"
        // docker仓库地址
        DOCKER_REGISTRY ="swr.cn-south-1.myhuaweicloud.com"
        // 这四个参数将组合成你的最终docker镜像名称为
        // swr.cn-south-1.myhuaweicloud.com/vp-whdev/springboot-demo
        
        
    }
    
    // 构建过程参数
    parameters {

        // 代码分支
        string(name:"BRANCH",defaultValue:"dev",description:"代码分支")
        // 版本号,将最被添加到docker镜像标签上
        string(name:"VERSION",defaultValue:"v1",description:"版本号")
        // 镜像TAG,将最被添加到docker镜像标签上
        string(name:"IMAGE_TAG",defaultValue:"latest",description:"镜像的tag")
        // 这两个参数将和环境变量的参数组合成
        // swr.cn-south-1.myhuaweicloud.com/vp-whdev/springboot-demo:v1-latest
    }

    tools {
        // Install the Maven version configured as "M3" and add it to the path.
        // 这个地方与系统设置的mvn工具包对应
        maven "M3"
    }

    stages {
        stage('Build') {
            steps {
                
                // Get some code from a gitlab
                // 注意credentialsId参数,填入你前面创建的git仓库用户名IM
                // 注意url参数,填入你的git仓库地址
                git branch: '${BRANCH}', credentialsId: '10b8bc82-8b90-4fbb-9f55-d7e3126b35c0', url: 'https://git.whdev.vpclub.cn:10081/park-weihai/backend-api.git'

                // Run Maven on a Unix agent.
                // 构建脚本默认在代码仓库根目录运行
                // 如果你的pom.xml文件不在根目录,需要使用dir指令进入到对应的目录
                // 或者使用mvn clean compile package -f ./source/pom.xml 指定pom文件位置
                // 如果你的pom文件是在源代码的根目录,可以删除dir代码块包裹
                
                dir("renren-cloud-tenant/"){
                    sh '''
                    
                    echo $(pwd)
                    mvn clean compile package
                    
                    '''
                }
            }
        }
        
        stage("docker"){
            steps{
                // docker build 默认在命令行运行的根目录查找Dockerfile
                // 如果你的Dockerfile不在根目录,需要使用dir指令进入到对应的目录
                // 如果你的Dockerfile在根目录下,可以删除dir代码块包裹
                dir('./renren-cloud-tenant/park-admin/park-admin-server/') {
                    
                    // 使用docker凭据,credentialsId为你前面创建的docker仓库凭据
                    withCredentials([usernamePassword(credentialsId: 'docker-huaweicloud', passwordVariable: 'docker_password', usernameVariable: 'docker_username')]) {
                        
                        sh '''
                        
                        echo $(pwd)
                        docker login -u ${docker_username} -p ${docker_password} ${DOCKER_REGISTRY}
                        docker build -t ${DOCKER_REGISTRY}/${PROJECT_NS}/${PROJECT_NAME}:${VERSION}-${IMAGE_TAG} .
                        docker push ${DOCKER_REGISTRY}/${PROJECT_NS}/${PROJECT_NAME}:${VERSION}-${IMAGE_TAG}
                        
                        '''
                    }
                }
            }
        }
    }
}



点击运行的时候没有出现构造参数界面

在项目配置选项里面,勾选参数化,然后与Pipeline脚本中设置的环境变量对应上。

nodejs Pipeline



pipeline {
    agent any
    
    // 环境变量,全局可用
    environment {
        // 项目名称,将生成docker镜像的名称的一部分
        PROJECT_NAME    ="nodejs-demo"
        // docker仓库的分组名称
        PROJECT_NS      ="vp-whdev"
        // docker仓库地址
        DOCKER_REGISTRY ="swr.cn-south-1.myhuaweicloud.com"
        // 这三个参数将组合成你的最终docker镜像名称为
        // swr.cn-south-1.myhuaweicloud.com/vp-whdev/nodejs-demo
        // nodejs专用,nodejs内存溢出错误时候需要
        NODE_OPTIONS    = "--max-old-space-size=4096"
        
    }

    // 构建过程参数
    parameters {
        // 代码分支
        string(name:"BRANCH",defaultValue:"develop",description:"代码分支")
        // 版本号,将最被添加到docker镜像标签上
        string(name:"VERSION",defaultValue:"v1",description:"版本号")
        // 镜像TAG,将最被添加到docker镜像标签上
        string(name:"IMAGE_TAG",defaultValue:"latest",description:"镜像的tag")
        // 这两个参数将和环境变量的参数组合成
        // swr.cn-south-1.myhuaweicloud.com/vp-whdev/nodejs-demo:v1-latest
    }
    
    
    stages {
        stage('Build') {
            steps {
                // Get some code from a gitlab
                // 注意credentialsId参数,填入你前面创建的git仓库用户名密码
                // 注意url参数,填入你的git仓库地址
                git branch: '${BRANCH}', credentialsId: '10b8bc82-8b90-4fbb-9f55-d7e3126b35c0', url: 'https://git.whdev.vpclub.cn:10081/park-weihai/front-web.git'
                
                // build
                // 需要使用的nodejs版本,与全局设置的nodejs工具包名称对应
                 nodejs('node-18.20') {
                    sh '''
                    
                    echo $(pwd)
                    node -v
                    npm -v
                    npm install --registry=https://registry.npmmirror.com
                    npm run build:test
                    
                    '''
                }
            }
        }
        
        stage("docker"){
            steps{

                // docker build 默认在命令行运行的根目录查找Dockerfile
                // 如果你的Dockerfile不在根目录,需要使用dir指令进入到对应的目录
                // 如果你的Dockerfile在根目录下,可以删除dir代码块包裹
                
                withCredentials([usernamePassword(credentialsId: 'docker-huaweicloud', passwordVariable: 'docker_password', usernameVariable: 'docker_username')]) {
                        
                    sh '''
                    
                    echo $(pwd)
                    docker login -u ${docker_username} -p ${docker_password} ${DOCKER_REGISTRY}
                    docker build -t ${DOCKER_REGISTRY}/${PROJECT_NS}/${PROJECT_NAME}:${VERSION}-${IMAGE_TAG} .
                    docker push ${DOCKER_REGISTRY}/${PROJECT_NS}/${PROJECT_NAME}:${VERSION}-${IMAGE_TAG}
                    
                    '''
                    
                }

            }
        }
    }
}