栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

jenkins从入门到生产教程-发布并启动相应的项目(四)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jenkins从入门到生产教程-发布并启动相应的项目(四)

1、安装docker

docker的安装直接访问以下地址安装即可:https://linzhefeng23.blog.csdn.net/article/details/78411199

1.1、 permission denied 问题

安装完成docker以后,我们使用jenkins用户执行docker images会出现如下的错误信息:

这是因为docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。

首先我们创建用户组(默认我们在安装docker的时候已经给安装了不过要是没有就添加下),如下所示:

groupadd docker

接着将jenkins添加到docker用户组

gpasswd -a jenkins docker

最后更新用户组

newgrp docker

接着我们就可以使用jenkins用户愉快的使用docker了。

2、安装基础镜像

基础镜像基于CentOs里面包含了我们的JDK的环境。

2.1、拉取中央仓库的CentOs镜像

直接执行以下代码,然后拉取我们的中央仓库的CentOs镜像到我们的本地的docker仓库

docker pull centos

完成以后我们执行以下命令

docker images

我们会看到如下的结果,则说明我们的镜像就拉取成功了。

2.2、安装JDK基础镜像 2.2.1、编写DockerFile
FROM docker.io/centos
   MAINTAINER linzf <282245889@qq.com>
   ENV LANG zh_CN.UTF-8
   ENV TZ=Asia/Shanghai
   RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
   RUN mkdir -p /usr/java/jdk1.8
   ADD jdk1.8.0_191 /usr/java/jdk1.8
   ENV JAVA_HOME /usr/java/jdk1.8
   ENV PATH $PATH:$JAVA_HOME/bin

然后将我们的jdk和这个DockerFileJdk文件上传到:/home/jenkins/app/baseJdk这个目录,如下所示:

然后我们使用jenkins用户进入到/home/jenkins/app/baseJdk使用以下命令解压我们的JDK:

tar -xvf jdk.tar 
2.2.2、制作镜像

我们使用jenkins用户进入到/home/jenkins/app/baseJdk目录,然后使用以下命令来打包我们的基础镜像:

 docker build -t "base-jdk8" . -f DockerfileJdk 

然后我们会看到如下的执行结果则说明我们创建基础镜像成功了:

3、发布并启动项目

我们直接打开我们前面的jenkins配置的vote-million-image这个流水线,然后在配置中如下所示的代码:

pipeline {
    agent any
    
    environment {
        APP_NAME = "vote-million"
        VERSION_NAME = "voteMillionVersion"
        WORK_PATH = "/home/jenkins/.jenkins/workspace/vote-million-image"
        DOCKER_LOG_PATH = "/home/app/docker/vote-million/log/"
        MAPPER_LOG_PATH = "/home/jenkins/app/logs/vote-million/"
        MAPPING_PORT = "8081:8080"
    }

    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'lazyboyl', url: 'https://github.com/lazyboyl/vote-million.git']]])
            }
        }
        stage('构建工程') {
            steps {
                echo '开始编译构建'
                sh 'cd ${WORK_PATH} && mvn clean package -Dmaven.test.skip=true'
            }
        }
        stage('清理镜像信息'){
            steps {
                echo '停止启动的容器'
                sh 'docker ps |grep "${APP_NAME}-*" |awk '{print $1}' | xargs -r docker stop'
                echo '删除停止的容器'
                sh 'docker ps  -a |grep "${APP_NAME}-*" |awk '{print $1}' | xargs -r docker rm'
                echo '删除镜像'
                sh 'docker images | grep "${APP_NAME}-*" | awk '{print $1":"$2}' | xargs -r docker rmi'
            }
        }
        stage('生成生成生DockerFile文件') {
            steps {
                echo '构建镜像'
                sh '''cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && lowerVersion=${version,,}  && cd ${WORK_PATH}/target && cat > Dockerfile << EOF 
                  FROM  base-jdk8
                     MAINTAINER linzf <282245889@qq.com>
                        RUN mkdir -p ${DOCKER_LOG_PATH}
                        ADD ${APP_NAME}-$version.jar /home/app/app.jar
                        CMD java -jar -Xms128m -Xmx1024m /home/app/app.jar'''
                sh 'cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && cd ${WORK_PATH}/target && docker build -t "${APP_NAME}-${version,,}" .'
            }
        }
        stage('启动项目'){
            steps {
                echo '启动APP'
                sh 'cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && docker run -d -u root  -p ${MAPPING_PORT} -v ${MAPPER_LOG_PATH}:${DOCKER_LOG_PATH} --privileged=true --name ${APP_NAME}-${version,,} ${APP_NAME}-${version,,}'
            }
        }
    }
}

然后我们可以直接构建我们的项目了

3.1、xargs语法

https://www.runoob.com/linux/linux-comm-xargs.html

3.2、sed语法

https://www.runoob.com/linux/linux-comm-sed.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/334175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号