Jenkins+Docker+Git 的流程

8字数 1117阅读 1268

在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是持续集成(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 的流程已经成功部署了。

推荐阅读更多精彩内容