使用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路径:
运行后进入Jenkins界面,安卓插件
SSH:用于SSH远程Docker主机执行Shell命令
Jenkins安装到此完成
#--------------------------------------------------------------------------
Harbor安装
#执行
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 安装完成
# 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
使用 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 项目
添加字符参数
添加仓库地址,我这是SVN
构建war包
增加个执行shell步骤
#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
接着部署到发布机器
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插件,在远程需发布机器上,使用本次服务镜像,运行容器
这样就完成了
参考资料:
- 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 ...
随机推荐
- linux库(程序)与包名联系
一般地,dev为相关开发库包. curses--cursor optimization光标优化--libncurses5-dev 现在常用的是new curses(ncurses). 在ubuntu中 ...
- 咕qwq
ccsp回来之后一直肚子难受,到现在还没好. 下午去人民医院急诊做了个CT,医生说是有问题的,但她看不出来,让我明天早起挂专家号去QAQ. UPD:初步诊断是胀气.医生让我先吃两天抗生素...
- Python中的字典和集合
一.字典(dict) 1. 概述 字典是Python唯一的映射类型. 只能使用不可变的对象(比如字符串)来作为字典的键,但是可以把不可变或可变的对象作为字典的值. 键值对在 ...
- label smooth
图像分类的一个trick,推导可参考这位博主https://leimao.github.io/blog/Label-Smoothing/ 知乎上的讨论https://www.zhihu.com/que ...
- mysql自增字段AUTO_INCREMENT重排或归零
由于删除了某些记录行,导致自增字段不连续了,重排或归零的方法: 方法1:truncate table 你的表名//这样不但重新定位自增的字段,而且会将表里的数据全部删除,慎用! 方法2:delete ...
- BZOJ1791 基环树直径
非递归版4S /************************************************************** Problem: 1791 User: 18357 Lan ...
- 遗传算法解决寻路问题——Python描述
概要 我的上一篇写遗传算法解决排序问题,当中思想借鉴了遗传算法解决TSP问题,本质上可以认为这是一类问题,就是这样认为:寻找到一个序列X,使F(X)最大. 详解介绍 排序问题:寻找一个序列,使得这个序 ...
- 网红题之一题多变$\;\;\text{e}^x\geqslant x^2+(\text{e}-2)x+1(x>0)$
母题 证明$:\;\;\text{e}^x\geqslant x^2+(\text{e}-2)x+1\;\;(x>0)$ 注$:\;$用不同的结构变形来证明 变式1: 若$\forall x\i ...
- HTML左边盒子固定,右边盒子自适应
html: <div class="box1"> <div class="divA">DIVA</div> <div ...
- 命令方式 搭建 (简易)Maven项目
原料:1.配好的Maven环境变量 2.c m d命令 win + r 输入 cmd 切换到此项目所要存在的位置 使用命令创建文件夹 切换 到 maven_demo中 输入 cd mave ...