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主机创建容器并发布。
Jenkins 基于 Docker git JAVA CI/CD的更多相关文章
- Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...
- Docker: Jenkins与Docker的自动化CI/CD流水线实战
什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...
- 基于 Jenkins+Docker+Git 的CI流程初探
在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...
- 【Devops】【docker】【CI/CD】2.docker启动jenkins环境+安装必要的插件
[注意:]jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问题!!! ================ ...
- Jenkins - 基于 Docker 的 Jenkins 安装
概述 安装 Jenkins 基于 Docker 这个有点 水一发 的性质... 场景 学习 Jenkins 第一步, 当然是安装 但是 安装的方法 很多 Jenkins 是基于 Java 的 所以是个 ...
- jenkins+maven+docker集成java发布(二)#远程发布
jenkins+maven+docker集成java发布(一)中写了在Jenkins服务器自动部署业务,那需要将java项目部署到其他服务器怎么操作 这里需要依赖插件Publish Over SSH ...
- 【Devops】【docker】【CI/CD】Jenkins源代码管理 添加gitlab项目地址,报错Failed to connect to repository : Error performing command: ls-remote -h git@192.168.92.130:8090/root/swapping.git HEAD
Jenkins源代码管理 添加gitlab项目地址 报错如下: Failed to connect to repository : Error performing command: ls-remot ...
- 【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署
==================================================================================================== ...
- jenkins+maven+docker集成java发布(一)自动发布
JAVA项目持续集成发布 标签(空格分隔): java jenkins 微服务中持续集成自动发布是很重要的一个环节,将不同的模块应用自动部署到一台或者N台服务器中如果采用人工部署的方式不太现实 git ...
随机推荐
- 【JS点滴】substring和substr以及slice和splice的用法和区别。
那么就由一道笔试题引入吧,已知有字符串a=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”: var a = "get-el ...
- Spring学习之路-从放弃到入门
AOP:方法拦截器 IOC:类管理容器 主要讲讲这一天看Spring视频学到的东西,以下的叫法全是自创的. 1.类实例管理容器 关于Spring,首先是对类的管理,在常规情况,生成一个类需要调用new ...
- VC++窗口创建过程,图形绘制,时钟程序
创建窗口步骤: (1)注册窗口类(RegisterClassEx) (2)创建窗口(CreateWindowEx) (3)在桌面显示窗口(ShowWindow) (4)更新窗口客户区(UpdateWi ...
- [android] fragment的生命周期和通讯
重写一下生命周期方法 所有的fragment都是依附于activity的,只有当activity显示出来的时候,fragment才能够创建上去 onAttach,当附加到activity上的时候 on ...
- Java基础——JSP(二)
一.JSP隐式对象概述 为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象. 在 jsp生成的Servlet源码中,有如下声明: publi ...
- 常见对象(int和String类型的相互转换)
public class Test03 { //基本数据类型包装类有八种,其中其中都有parsexxx的方法 //可以加将这七种字符串表现形式转换成基本数据类型 //char的包装类Character ...
- 【14】代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性.这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- 自定义MVC框架之工具类-图像处理类
截止目前已经改造了4个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 图像处理类: 1,图片加水印处理( ...
- js-redux学习笔记2
1.为了 dispatch 一个 action,我们需要一个 dispatch 函数.可以用一个 action creator 去发送一个 action. var setNameActionCreat ...
- Android热修复之 - 收集崩溃信息上传服务器
1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...