• Jenkins 基于 Docker git JAVA CI/CD


    准备两台机器

    192.168.31.200 centos7  docker harbor git

    192.168.31.201 centos7  docker jenkins maven git

    Habor Docker 安装参考前面的文章。

     我们的项目到时候会部署到192.168.31.201 上

    一、git 安装配置

    在192.168.31.200 安装git 做服务器端
    yum install git -y
    
    设置git用户
    useradd git
    passwd git
    su - git mkdir tomcat-java-demo.git && cd tomcat-java-demo.git 初始化 git --bare init 在192.168.31.201 安装git 做客户端 yum install git -y 测试服务器端地址是否能拉取 git clone git@192.168.31.200:/home/git/tomcat-java-demo.git mv tomcat-java-demo tomcat-java-demo.bak 网上clone个java 项目的demo git clone https://github.com/lizhenliang/tomcat-java-demo cd tomcat-java-demo 修改提交私有git仓库地址 vim .git/config ##修改URL部分,替换成私有git仓库地址 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@192.168.31.200:/home/git/tomcat-java-demo.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master git add . git commit -m 'all' 提交的时候出现问题 设置用户名和邮箱 git config --global user.name "test" git config --global user.email "test@123.com"

    192.168.31.201 Jenkins上配置免密登陆git仓库 git用户。

    ssh-keygen

    ssh-copy-id git@192.168.31.200

    ssh git@192.168.31.200

    二、tomcat java 镜像 

    在192.168.31.200上生成 tomcat镜像,及提交至Harbor仓库

    vim Dockerfile-tomcat
    
    FROM centos:7
    MAINTAINER test
    
    ENV VERSION=8.5.38
    
    RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && 
        yum clean all && 
        rm -rf /var/cache/yum/*
    
    RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && 
        tar zxf apache-tomcat-${VERSION}.tar.gz && 
        mv apache-tomcat-${VERSION} /usr/local/tomcat && 
        rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && 
        mkdir /usr/local/tomcat/webapps/test && 
        echo "ok" > /usr/local/tomcat/webapps/test/status.html && 
        sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && 
        ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    ENV PATH $PATH:/usr/local/tomcat/bin
    
    WORKDIR /usr/local/tomcat
    
    EXPOSE 8080
    CMD ["catalina.sh", "run"]
    

    build 镜像

    docker build -t tomcat:v1 -f Dockerfile-tomcat .
    

    配置docker 私有仓库地址

    [root@node1 ~]# cat /etc/docker/daemon.json 
    {
      "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
      "insecure-registries":["http://192.168.31.200"]
    }
    
    重启docker
    systemctl daemon-reload
    systemctl restart docker  

    提交本地Harbor仓库,使用默认library仓库

    docker tag tomcat:v1 192.168.31.200/library/tomcat:v1
    docker login 192.168.31.200
    docker push 192.168.31.200/library/tomcat:v1
    

      

    三、安装Jenkins

    192.168.31.201 主机安装
    安装之前需要安装JAVA环境,本文里使用的JDK1.8.0_45
    jenkins 下载地址 https://jenkins.io/download/ ,本文使用jenkins war包
    
    JAVA环境配置
    # tar zxf jdk-8u45-linux-x64.tar.gz
    # mv jdk-8u45-linux-x64 /usr/local/jdk1.8
    # vi /etc/profile
    JAVA_HOME=/usr/local/jdk1.8
    PATH=$PATH:$JAVA_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME PATH CLASSPATH
    # source /etc/profile
    
    Jenkins 安装启动
    # wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
    # wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-
    8.5.32.tar.gz
    # tar zxf apache-tomcat-8.5.32.tar.gz
    # mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins
    # rm /usr/local/tomcat-jenkins/webapps/* -rf
    # unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT
    # cd /usr/local/tomcat-jenkins/bin/
    # ./startup.sh
    
    部署成功,访问Jenkins:http://192.168.31.201:8080
    网络好的情况下,我们可以选择在线安装。不好的我们可以跳过
    

    离线安装,我们将https 改成http 然后提交就好。

     

    我们安装Pipeline插件和SCM to job  这两个插件,有需要我们再安装其他插件

    安装完成后我们新建一个测试项目

    1、参数化构建,我们这里的Branch是后面用语pipeline脚本中的变量,master是代表git的分支

    2、pipeline 脚本设置

    Pipline Syntax 可以生成你pipeline中的参数。

    连接git仓库拉去代码

    将上面生成的这段替换下面Pipeline脚本中。*/master 替换为${Branch} 变量

    pipeline 脚本

    node { 
       // 拉取代码
       stage('Git Checkout') { 
           checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '863606a1-a10e-45a0-8643-001b9d8eb05e', url: 'git@192.168.31.200:/home/git/tomcat-java-demo.git']]])   
       }
       // 代码编译
       stage('Maven Build') {
            sh '''
            export JAVA_HOME=/usr/local/jdk1.8
            /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
            '''
       }
       // 项目打包到镜像并推送到镜像仓库
       stage('Build and Push Image') {
    sh '''
    REPOSITORY=192.168.31.200/library/tomcat-java-demo:${branch}
    cat > Dockerfile << EOF
    FROM lizhenliang/tomcat 
    MAINTAINER www.ctnrs.com
    RUN rm -rf /usr/local/tomcat/webapps/*
    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
    EOF
    docker build -t $REPOSITORY .
    docker login 192.168.31.200 -u admin -p Harbor12345
    docker push $REPOSITORY
    '''
       }
       // 部署到Docker主机
       stage('Deploy to Docker') {
            sh '''
            REPOSITORY=192.168.31.200/library/tomcat-java-demo:${branch}
            docker rm -f tomcat-java-demo |true
            docker image rm $REPOSITORY |true
            docker container run -d --name tomcat-java-demo -p 88:8080 $REPOSITORY
            '''
       }
    }
    

    上面pipeline脚本核心主要在于拉去docker 镜像,推送镜像,已经部署这块。基本用shell实现。

    3、保存,然后构建。

    四、查看镜像状态,访问测试网站

    [root@node1 app]# docker ps
    CONTAINER ID        IMAGE                                     COMMAND             CREATED             STATUS              PORTS                  NAMES
    6bfe67c44c19        192.168.31.200/library/java-demo:master   "catalina.sh run"   2 hours ago         Up 2 hours          0.0.0.0:88->8080/tcp   java-demo
    
    
    [root@node1 app]# docker container ps
    CONTAINER ID        IMAGE                                     COMMAND             CREATED             STATUS              PORTS                  NAMES
    6bfe67c44c19        192.168.31.200/library/java-demo:master   "catalina.sh run"   2 hours ago         Up 2 hours          0.0.0.0:88->8080/tcp   java-demo
    [root@node1 app]# docker container logs 6bfe67c44c19
    16-Mar-2019 19:30:45.806 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.38
    16-Mar-2019 19:30:45.817 INFO [main] 
    ……………
    
    16-Mar-2019 19:30:47.527 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
    16-Mar-2019 19:30:47.528 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.38
    

    我们的容器暴露的是88端口

    [root@master ~]# curl  192.168.31.201:88 -I
    HTTP/1.1 200 
    Content-Type: text/html;charset=utf-8
    Content-Language: en-US
    Content-Length: 2538
    Date: Sat, 16 Mar 2019 13:36:13 GMT
    

      

    Jenkins 还可以使用docker 插件。

    当然要想学好pipeline 你需要花,大量的时间。

    Jenkins CI/CD 主要是在于他的工作流程 思想。

    工作流程:
    1. 开发人员提交代码到Git版本仓库;
    2. Jenkins人工/定时触发项目构建;
    3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
    4. Jenkins在Docker主机创建容器并发布。

  • 相关阅读:
    C#与独孤九剑
    C#系列视频教程字符和字符串操作
    【设计模式】迪米特法则
    【设计模式】考题 模板方法模式
    C#字符和字符串
    【热门技术】解决Win7 下面很多软件安装不兼容的问题
    C#使电脑发出嗡鸣声
    C#视频教程下载(第一章)
    【设计模式】牛市股票还会亏钱 外观模式
    【设计模式】好菜每回味不同 建造者模式
  • 原文地址:https://www.cnblogs.com/Tempted/p/10544192.html
Copyright © 2020-2023  润新知