zoukankan      html  css  js  c++  java
  • 使用Docker构建企业Jenkins CI平台

      在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部署、交付(CD)。在此,我们来以一个案例初步了解 CI 流程。那么什么是 CI 呢?简单来讲,CI 就是将传统的代码合并、构建、部署、测试都集成在一起,不断地执行这个过程,并对结果进行反馈。
    CI 流程设计图:
     

    工作流程:

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

    服务器规划:

    IP地址
    角色
    10.0.0.111
    Jenkins,Docker,JDK,Maven
    10.0.0.100
    Harbor(Docker,docker-compose),Git

    部署Git代码版本仓库

    10.0.0.100 操作
    # yum install git -y
    # useradd git
    # passwd git
    # su – git
    # mkdir wenlong.git
    # cd wenlong.git/
    #初始化仓库
    # git --bare init
    10.0.0.111 操作
    Jenkins主机测试访问该仓库:
    git clone git@10.0.0.100:/home/tools/git/wenlong.git
    正克隆到 'wenlong'...
    git@10.0.0.100's password: "git账号的密码"
    warning: 您似乎克隆了一个空版本库。
    模拟生产项目,拉取github上的一个demo,并上传至本地git库
    # mv tomcat-java-demo-master/* wenlong/
    # git add .
    需要验证
    # git config --global user.email "xuewenlong@123.com"
    # git config --global user.name "xuewenlong"
    # git commit -m "all"
    # git push origin master

    部署Harbor镜像仓库

    10.0.0.100 操作
     

    Jenkins主机安装Docker并配置可信任

    10.0.0.111 操作
    # wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    # yum install docker-ce -y
    # cat /etc/docker/daemon.json 
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
      "insecure-registries": ["192.168.31.63"]
    }
    # systemctl start docker
    # systemctl enable docker

    Jenkins环境部署

    # tar zxvf jdk-8u45-linux-x64.tar.gz
    # mv jdk1.8.0_45 /usr/local/jdk
    # tar zxf apache-maven-3.5.0-bin.tar.gz
    # mv apache-maven-3.5.0 /usr/local/maven
    # vim /etc/profile
    JAVA_HOME=/usr/local/jdk
    PATH=$PATH:$JAVA_HOME/bin:/usr/local/maven/bin
    export JAVA_HOME PATH
    # source /etc/profile
    在10.0.0.111主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:
    # wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
    # wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
    # tar zxf apache-tomcat-8.5.38.tar.gz
    # mv apache-tomcat-8.5.38 /usr/local/tomcat-jenkins
    # rm -rf /usr/local/tomcat-jenkins/webapps/*
    # mv jenkins.war /usr/local/tomcat-jenkins/webapps/ROOT.war
    # cd /usr/local/tomcat-jenkins/bin/
    # ./startup.sh
    启动后,浏览器访问
    http://10.0.0.111:8080/,按提示输入密码,登录即可。

    Jenkins安装必要插件

    由于jenkins是离线安装,所有在此需要配置一下插件下载地址:系统管理-->插件管理-->Advanced
    修改下方地址
    jenkins插件清华大学镜像地址
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    http://mirror.xmission.com/jenkins/updates/update-center.json
    将https修改为http 再点Submit
    Submit后点击Available,Check now此时我们可以看到很多可获得插件
    安装git和pipeline插件
     

    Jenkins流水线部署

    pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
    创建一个pipeline类型的Job
     
    选择流水线类型
     
    配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。
    选择Git方式,配置Git仓库地址,再添加认证相关
    使用秘钥认证方式需要将jenkins上生成的公钥发送到git服务器上,然后将jenkins上的生成的私钥内容粘贴到下图Key中,这样jenkins就可以免交互的拉取git仓库中的代码了。
    [root@docker-jenkins bin]# ssh-keygen
    [root@docker-jenkins bin]# cd
    [root@docker-jenkins ~]# ls .ssh/
    id_rsa  id_rsa.pub  known_hosts
    [root@docker-jenkins ~]# ssh-copy-id git@10.0.0.100
     
     
     
     
    配置完成后,生成Pipeline脚本了。点击下方Generate Pipeline Script,然后复制方框内的内容。
    编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。
    node {
       def mvnHome
       stage('Preparation') { // for display purposes
       //拉取代码
          checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7c00a680-53fd-42db-a12a-21b803dd6c40', url: 'git@10.0.0.100:/home/tools/git/wenlong.git']]])
       }
       //编译代码
       stage('Build') {
            sh '''
            export JAVA_HOME=/home/tools/jdk1.8.0_221
            mvn clean package -Dmaven.test.skip=true
            '''
       }
       // 项目打包到镜像并推送到镜像仓库
       stage('Build and Push Image') {
    sh '''
    REPOSITORY=10.0.0.100/library/wenlong:${branch}
    cat > Dockerfile << EOF
    FROM 10.0.0.100/library/tomcat:v1 
    LABEL maintainer wenlong
    RUN rm -rf /usr/local/tomcat/webapps/*
    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
    EOF
    docker build -t $REPOSITORY .
    docker login 10.0.0.100 -u admin -p Harbor12345
    docker push $REPOSITORY
    '''
       }
       // 部署到Docker主机
       stage('Deploy to Docker') {
            sh '''
            REPOSITORY=10.0.0.100/library/wenlong:${branch}
            docker rm -f tomcat-java-demo |true
            docker pull $REPOSITORY
            docker container run -d --name wenlong -p 88:8080 $REPOSITORY
            '''
       }
    }
     
    在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。
    然后保存配置

    发布测试

    回到主界面,我们开始构建任务:
     
    查看构建成功后的图形构建过程:
    通过浏览器来访问java项目:http://10.0.0.111:88/
    至此部署完成,文章参考于李振良老师
  • 相关阅读:
    探寻京东云核心竞争力的源泉
    在线公开课 | 教你如何自行搭建一个威胁感知大脑?
    推迟学习系统调用
    linux中未实现的系统调用
    man(2) V
    man(2) W
    图像叠加
    man(2) readv writev
    qt 视频播放
    ffmpeg参数
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/13157163.html
Copyright © 2011-2022 走看看