使用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 ...
随机推荐
- html和css牛刀小试
html和css网上教程很多,这里我也给大家一个网址:https://www.cnblogs.com/majj/ 今天心血来潮就模仿着小米的官网写了部分代码,效果图如下:(本人故意加了个华为广告栏在最 ...
- 防sql注入方法
mysql_escape_string(strip_tags($arr)) /** * 函数名称:post_check() * 函数作用:对提交的编辑内容进行处理 * 参 数:$post: 要提交的内 ...
- C#调用C++的dll各种传参
1. 如果函数只有传入参数,比如: //C++中的输出函数 int __declspec(dllexport) test(const int N) { ; } 对应的C#代码为: [DllImport ...
- BZOJ4641 基因改造[KMP]
这道题以前好像模拟的时候做过,当时不会做,于是用hash水过去了.. 正解是KMP,还是用当前字符与上一次相同字符位置的距离表示数组,于是数值相等时就代表相似.第一次出现用INF代替. 然后要匹配有多 ...
- package+explorer不显示项目的问题
昨天遇到了这个问题,百度了一下,怎么搞的都有,但是感觉都不理想,晚上的时候才在网上又发现这个方法,今天试了一下,效果还不错,分享一下. 点击 Window ---> Close All Pers ...
- radio(单选框)/checkbox(复选框) 美化
由于某种原因,可能需要对单选框(radio)或复选框(checkbox)进行美化,那么直接修改样式是行不通,要实现就需要添加js,以下js依赖于jquery radio.js: function ra ...
- 将TextEdit设置为密码框
属性--Properties--UseSystemPasswordChar设置为true
- 30 最小n个数
public class test30{ public static void main(String args[]){ int array[]={3,2,5,1,4}; int temp[] = f ...
- C#生成的后台文件 ***.vshost.exe
vshost是visual studio宿主应用程序,vs运行调试时是打开的其实是这个文件,这个程序可以让vs跟踪调试信息.而exe则可以直接打开,vs不会跟踪任何这个文件的运行情况.只要引用的程序集 ...
- 【leetcode】1254. Number of Closed Islands
题目如下: Given a 2D grid consists of 0s (land) and 1s (water). An island is a maximal 4-directionally ...