使用Jenkins发布Docke
需要准备的,docker,jenkins,Harbor
docker安装
安装依赖:
# yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker软件包源:
# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker CE:
# yum install docker-ce -y
配置加速器:
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
启动并开机启动:
# systemctl start docker
# systemctl enable docker
#--------------------------------------------------------------------------
安装Jenkins(使用docker安装)
#dockerfile,内容如下
# 设置基础镜像
FROM jenkins/jenkins:lts
# 下面是一些创建者的基本信息
# 设置环境变量,所有操作都是非交互式的
#ENV DEBIAN_FRONTEND noninteractive
#ENV MAVEN_HOME /opt/apache-maven-3.3.9
#ENV PATH $PATH:/opt/apache-maven-3.3.9/bin
#设置为root用户运行
USER root
#安装ansible,rsync,创建密钥目录
&& apt-get update \
&& apt-get -y install ansible rsync \
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
USER jenkins
#添加第三方工具JDK,mamven,密钥,opt.tar.gz中已加入了JDK,mamven,ADD,解压后即用,如果觉得这样导致镜像容量过大,可以去掉,用-v挂载
ADD opt.tar.gz /
COPY id_rsa /var/jenkins_home/.ssh
#--------------------------------------------------------------------------
#构建镜像
docker build -t ck-5 ck:v7 .
运行容器,以自己的需要修改,
#目录说明
ansible ansible配置
config Jenkins发布时对应的应用配置
Dockerfile 字面意思
jenkins.tar.gz jenkins工作目录配置
#容器运行命令,使用
docker run -d -p 9995:8080 \
-v /data/jenkins:/var/jenkins_home \
-v /data/jenkins-Docker/ansible:/etc/ansible \
-v /data/jenkins-Docker/config:/data/config \
-v /data/jenkins-Docker/repository:/var/jenkins_home/.m2/repository \
--name ck-5 ck:v7
#不需要挂载这些配置的只需要如下执行
docker run -d -p 9995:8080 --name ck-5 ck:v7 #运行Jenkins容器
Jenkins配置全局工具配置
主页面 -> 系统管理 -> 全局工具配置
指定JDK、Maven路径:

.png)
运行后进入Jenkins界面,安卓插件
SSH:用于SSH远程Docker主机执行Shell命令
Jenkins安装到此完成
#--------------------------------------------------------------------------
Harbor安装
.png)
#执行
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-composezan 安装完成
.png)
# cd /usr/local/src/
# tar zxf harbor-online-installer-v1.2.0.tgz -C /usr/local/
# cd /usr/local/harbor/
修改配置文件
配置文件为:/usr/local/harbor/harbor.cfg
# vim /usr/local/harbor/harbor.cfg
hostname = 192.168.1.17 (这里写你的域名或者IP,先不要去管其他配置)
执行安装脚本:
# /usr/local/harbor/install.sh
然后会有很长一大段
。。。
。。。
。。。
好了,不信你看看,docker ps -a
.png)
使用 docker-compose来管理Harbor,
# cd /usr/local/harbor/ #注意要先进去此目录哦
# docker-compose ps
Harbor的启动和停止
启动Harbor
# docker-compose start
停止Harbor
# docker-comose stop
重启Harbor
# docker-compose restart
访问测试
在浏览器输入 192.168.1.17,因为我配置的域名为192.168.1.17。请大家根据自己的配置情况输入访问的域名;
默认账号密码: admin / Harbor12345 登录后修改密码
默认安装后是http协议,docker在访问库的时候默认是使用https协议,所以要先修改
[root@localhost dockerfile]# more /etc/docker/daemon.json
{"insecure-registries":["192.168.1.17"]}
加入这个,加上后重启docker ,命令:systemctl restart docker
需要访问Harbor私库的机器需要先用
docker login 192.168.1.17(私库地址) 登录,那个用户下使用,就用那个用户界面下去操作登录
如果是用Jenkins 执行的 重启下Jenkins 重启命令:service jenkins restart
docker发布
首先先构建一个Tomcat基础镜像,JDK安装在宿主机上,容器以挂载形式使用
JDK安装
# tar zxvf jdk-8u45-linux-x64.tar.gz
# mv jdk-8u45-linux-x64 /usr/local/jdk1.8
Tomcat基础镜像Dockerfile:
# cat Dockerfile
FROM centos:7
ENV VERSION=8.5.32
ENV JAVA_HOME /usr/local/jdk
RUN yum install wget -y
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/ROOT
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
构建镜像并上传到Harbor
docker build -t harbor.yedsfe.cn/test/tomcat-web . #构建镜像,仓库地址/镜像名称
docker push harbor.yedsfe.cn/test/tomcat-web #上传镜像
接下来就是Jenkins的job配置了:
创建一个新的 Maven 项目
添加字符参数
.png)
添加仓库地址,我这是SVN
.png)
构建war包
.png)
增加个执行shell步骤
.png)
#docker仓库地址和镜像名称:版本
REPOSITORY=harbor.yijhjge.cn/test/mjs-web:${Tag}
echo '================开始构建镜像================'
cat > Dockerfile << EOF
FROM harbor.yinmishe.cn/test/tomcat-web:latest
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY $module/target/*.war /usr/local/tomcat/webapps/ROOT.war
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
echo '================开始推送镜像================'
docker push $REPOSITORY
echo '================删除ci机器镜像=============='
docker image rm $REPOSITORY |true
接着部署到发布机器
.png)
REPOSITORY=harbor.yddfddwee.cn/test/mjs-web:${Tag}
# 部署
docker rm -f blog-solo |true
docker image rm $REPOSITORY |true
docker container run -d --name blog-solo -v /usr/local/jdk:/usr/local/jdk -p 88:8080 $REPOSITORY
保存后,就配置完成了
总结下过程,虽然说写的很多但其实发布过程很简单,把Jenkins, Docker ,Harbor仓库搭建好
先在构建个Tomcat基础镜像传入Harbor仓库
Jenkins拉取svn或者git仓库中的代码,使用maven打包出war包
增加,执行shell,拉取Harbor中的Tomcat基础镜像,替换war包后,构建出本次项目镜像,并上传到harbor仓库,可以在镜像命名的时候使用Tag区分
使用ssh插件,在远程需发布机器上,使用本次服务镜像,运行容器
这样就完成了
.png)
参考资料:
- jenkins构建docker镜像上传到harbor并发布到kubernetes
很早之前写过一篇jenkins集成docker的文章,使用的是CloudBees Docker Build and Publish plugin插件.这篇文章是直接使用shell脚本做的,主要是这次有 ...
- 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...
- Jenkins集成Docker镜像实现自动发布
1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...
- jenkins+maven+docker集成java发布(二)#远程发布
jenkins+maven+docker集成java发布(一)中写了在Jenkins服务器自动部署业务,那需要将java项目部署到其他服务器怎么操作 这里需要依赖插件Publish Over SSH ...
- jenkins+maven+docker集成java发布(一)自动发布
JAVA项目持续集成发布 标签(空格分隔): java jenkins 微服务中持续集成自动发布是很重要的一个环节,将不同的模块应用自动部署到一台或者N台服务器中如果采用人工部署的方式不太现实 git ...
- 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...
- 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...
- Jenkins 基于 Docker git JAVA CI/CD
准备两台机器 192.168.31.200 centos7 docker harbor git 192.168.31.201 centos7 docker jenkins maven git Ha ...
- Jenkins指定tag发布到k8s环境
Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...
随机推荐
- 异常-User class threw exception: java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.
1 详细信息 User class threw exception: java.lang.IllegalStateException: Cannot call methods on a stopped ...
- 网络初级篇之OSPF(一)原理
一.OSPF是什么 Open Shortest Path First, 开放最短路径优先协议,是一种开源的使用最短路径优先(SPF)算法的内部网关协议(IGP).常用于路由器的动态选路. 二.OSPF ...
- Mongodb操作-更新操作符
1.$inc 用法:{$inc:{field:value}} 作用:对一个数字字段的某个field增加value 示例:将name为chenzhou的学生的age增加5 > db.student ...
- kotlin面向对象之接口、代理与委托、单例模式
接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...
- Summer training round2 #3
A!: GTY系列题 B!:莫队加分块 GTY系列题 C!:线段树模拟拓扑排序(把普通的拓扑排序的栈操作改成线段树区间减一,查询区间最右侧的0的位置即可.注意一 ...
- cmd 端口占用
netstat -ano|findstr 1080 taskkill /pid 3188 /f
- Android APK 手动签名
首先,如果没有签名密钥,先生成密钥: keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore and ...
- 关于在react里面es6构建类的时候,一些开始的问题
一般来说我们写react代码,个人习惯 这个里面没有constructor和super的,这样写也没啥问题.因为他会默认加上 但是有的时候有人会加上这两个 可以不写constructor,一旦写了co ...
- Leetcode练习题21. Merge Two Sorted Lists
题目描述(easy) Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new ...
- __stdcall、__cdcel、__fastcall 调用
常用的调用约定有stdcall,cdecl,fastcall,thiscall,naked call等,以下将 __stdcall.__cdecl和__fastcall三种函数调用协议加以比较,函数调 ...