Jenkins+Docker+Git 的流程

作者: gaby666 | 来源:发表于2019-08-03 10:44 被阅读11次

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

    流程图

    image image

    工作流程

    1. 开发人员提交代码到Git版本仓库;

    2. Jenkins人工/定时触发项目构建;

    3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;

    4. Jenkins在Docker主机创建容器并发布

    主机环境规划

    docker-jenkins: 10.0.0.98

    docker-git-harbor:10.0.0.99

    1. 部署Git代码版本仓库

    安装:

    image

    配置git用户:

    image

    创建库:

    image

    另一台docker-jenkins访问该仓库:

    image

    模拟生产项目,拉取github上的一个demo,并上传至本地git库

    image

    **2. jenkins环境部署 **

    部署jdk环境及maven

    image

    在10.0.0.98主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:

    image

    启动后,浏览器访问http://10.0.0.98:8080/,按提示输入密码,登录即可。

    image

    3. 部署私有镜像仓库

    企业级harbor镜像仓库部署:

    https://www.cnblogs.com/kaye/p/10524391.html

    构建Tomcat基础镜像,并推送到harbor镜像库:

    image

    4. Jenkins安装必要插件

    由于jenkins是离线安装,所有在此需要配置一下插件下载地址:系统管理-->插件管理-->Advanced

    image image

    修改下方地址,将https修改为http 再点Submit

    image

    Submit后点击Available,Check now此时我们可以看到很多可获得插件

    image

    首先搜索并安装Pipeline插件

    pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与

    可视化。

    image

    再安装SCM to job 插件,同上步骤(搜索,安装)。

    ** 5. 项目创建**

    创建jobs

    image

    选择流水线类型

    image

    到这里我们就开始配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。

    image

    如下图,我们Git方式,配置Git仓库地址,再添加认证相关。

    image

    这里我们使用的是秘钥认证方式,需要将jenkins上生成的公钥发送到git服务器上,然后将jenkins上的生成的私钥内容粘贴到下图Key中,这样jenkins就可以免交互的拉取git仓库中的代码了。

    image image image

    配置完成后,我们就可以生成Pipeline脚本了。点击下方Generate Pipeline Script,然后复制方框内的内容。

    image

    编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。


    node {

    // 拉取代码

    stage('Git Checkout') {

       checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c42214eb-db1e-49fb-83c9-f78d1f4310a2', url: 'git@10.0.0.99:/home/git/tomcat-java-demo.git']]])
    

    }

    // 代码编译

    stage('Maven Build') {

        sh '''
    
        export JAVA_HOME=/usr/local/jdk
    
        /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
    
        '''
    

    }

    // 项目打包到镜像并推送到镜像仓库

    stage('Build and Push Image') {

    sh '''

    REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}

    cat > Dockerfile << EOF

    FROM reg.dingkai.com/library/tomcat:v1

    MAINTAINER kai

    RUN rm -rf /usr/local/tomcat/webapps/*

    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war

    EOF

    docker build -t $REPOSITORY .

    docker login reg.dingkai.com -u admin -p 123456

    docker push $REPOSITORY

    '''

    }

    // 部署到Docker主机

    stage('Deploy to Docker') {

        sh '''
    
        REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}
    
        docker rm -f tomcat-java-demo |true
    
        docker pull $REPOSITORY
    
        docker container run -d --name tomcat-java-demo -p 88:8080 $REPOSITORY
    
        '''
    

    }

    }

    image

    在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。

    image

    然后保存配置。

    6. 开始构建任务

    回到主界面,我们开始构建任务

    image

    可以通过Console Output输出查看jenkins构建流程

    image

    成功构建会提示: SUCCESS

    image

    我们也可以查看构建成功后的图形构建过程

    image

    通过浏览器来访问tomcat-java-demo项目:http://10.0.0.98:88/

    可以正常访问,至此基于 Jenkins+Docker+Git 的流程已经成功部署了。

    相关文章

      网友评论

        本文标题:Jenkins+Docker+Git 的流程

        本文链接:https://www.haomeiwen.com/subject/hqufdctx.html