Jenkins CI/CD Pipeline实战完整步骤

一、CICD和DevOps

当我们在谈论现代的软件编译和发布流程的时候,经常会听到CI 和CD这样的缩写短语。CI很容易理解,就是持续集成。但是CD既可以指代码持续交付,也可理解为代码持续部署。CI和CD之间有很多相似的部分,但是也有很大的区别。

在这里插入图片描述

在这里插入图片描述

二、CI/CD和Docker结合

什么是DevOps?

那么什么是DevOps?DevOps和CI/CD有又什么关系呢?
DevOps目前并没有权威的定义,DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

在这里插入图片描述

流程解析:
用户给我们反馈,产品经理列个计划,变成需求,根据需求列待办清单,清单有优先级,重要的事先执行,慢慢的发布迭代计划,开发拿到任务,进行编写代码,编完完毕后上传到代码库,发布集成系统,里面有测试环境,生产环境,发布环境,各做各的事,如果需要智能一些,可以把测试运维全部集成到系统里面

在这里插入图片描述

流程解析:

1开发人员提交代码到代码库(Git Push)
2Jenkins从版本库拉取最新代码(Pull Code)
3Jenkins通过Maven进行构建打包(Build Package)
4通过Docker推送至Harbor仓库(Push/Harbor)
5测试环境直接拉取最新版本镜像,并部署到测试环境(Pull/Docker Build)
6.发布项目—测试—反馈结果

开始实操

在这里插入图片描述

生成流水线脚本:
在这里插入图片描述

三、实现完整Pipeline

流水线 Pipeline script:

pipeline {
    agent any


options { timestamps() }

environment {
name="shopfront"
image="registry.cn-shenzhen.aliyuncs.com/lolos/loloss:${name}$BUILD_ID"

}

    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'wss12', url: 'https://gitee.com/abc34******/shopfront.git']]])
            
            }
        }
        
  stage ('代码编译') {
            steps {
                //代码编译
                sh 'mvn clean install'
                //sh 'ls -lh target/'
            }
        }

        
 stage ('打包docker镜像') {
            steps {
                //打包docker镜像
                sh 'docker build -t ${name}:${BUILD_ID} .'
                //docker镜像打阿里云标签
                sh 'docker tag  ${name}:${BUILD_ID} ${image}'
                //推送镜像
                sh 'docker push ${image}'

                // 删除镜像
                sh 'docker rmi ${name}:${BUILD_ID}'
              
            }
        }
        
        //CD
 stage ('部署上线') {
            steps {
                
                sh 'ansible 192.168.8.143 -m command -a "docker pull ${image}"' #远程登录,拉取镜像
                
                sh 'ansible 192.168.8.143 -m command -a "docker rm -f ${name}"' #删除原来的容器,首次部署记得注释
                sh 'ansible 192.168.8.143 -m command -a "docker run -d --name ${name} - p8010:8010 ${image}"'  #登录
                sh 'ansible 192.168.8.143 -m shell -a "docker ps -a | grep ${name}"' #查看拉取的新镜像是否存在
            }
        }
		
    }
}
cat<<END>Dockerfile
FROM openjdk:8-jre
ADD target/shopfront-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8010
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
END

ansible 安装:

yum install epel-release -y
yum install ansible -y

ansible 配置:

vim /etc/ansible/hosts
192.98.2.194  ansible_ssh_user=root ansible_ssh_pass='1223'

拉取代码:
在这里插入图片描述

代码编译:
在这里插入图片描述

打包Docker镜像:
在这里插入图片描述

部署上线:

在这里插入图片描述
在这里插入图片描述


版权声明:本文为clover661原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。