搭建基于 Docker 的 CI/CD
安装 Docker
安装这里就不在赘述,详情可以看下面这条链接。
docker 基础和安装:https://blog.csdn.net/qq_39253370/article/details/115430300
CI/CD 概念
- 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
- 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
- 持续交付(Continuous Delivery,CD):将最终产品发布到生产环境,给用户使用。
安装Harbor
Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
为什么使用 harbor?
当有多个镜像需要部署到多个节点服务器上面时,如果没有一个统一管理镜像的地方,那么就需要再每台上面写 dockerfile 构建镜像,任务量大的时候这很浪费效率,harbor 就是一个镜像管理仓库,构建好的镜像 push 到 harbor 上面,那么其他节点部署的时候直接从 harbor 仓库中 pull 下来运行就可以了,所以harbor是作为一个中心节点来集中管理镜像。
安装步骤:
安装 docker
安装 工具包:yum install -y yum-utils device-mapper-persistent-data lvm2 安装工具包安装docker软件包源:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //这里使用阿里云的源,官方的再国外,比较慢安装 docker-ce版本:
yum install -y docker-ce 启动docker:
systemctl start docker 设置开机自动启动:
systemctl enable docker 镜像加速:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 重启docker
systemctl restart docker
安装 harbor
下载 harbor 离线包:https://github.com/goharbor/harbor/releases
解压:
tar zxvf harbor-offline-installer-v1.9.1.tgz
cd harbor
vi harbor.yml 修改harbor访问域名 hostname
执行 ./prepare 先准备一下
./install 安装时会提醒你没有安装docker-compose
安装 docker-compose:
安装方式:https://docs.docker.com/compose/install/#install-compose
mv docker-compose user/bin/docker-compose 移动到bin目录下命名为docker-compose
chmod +x user/bin/docker-compose 加一个可执行权限
执行 ./install
成功之后执行 docker-compose ps 看一下harbor组件是否运行成功
查看默认密码:cat harbor.yml 默认是 Harbor12345
安装成功页面:
安装上述执行的一些相关命令和步骤:
推送镜像到 harbor 仓库里中:
这里会教你怎么推送镜像到仓库,library-镜像仓库-推送镜像
推送命令:
docker tag nginx:latest 175.27.229.160/nginx:latest
docker push 175.27.229.160/nginx:latest
提示连接拒绝,因为 dokcer 默认是 https去访问的,harbor 只支持 http
解决办法:需要在docker配置可信任
docker info 找到 insecure-registries
vim /etc/docer/daemon.json 将"insecure-registries": ["自己的ip"]
重启docker:systemctl restart docker 如果起不来一定是配置有问题,请重新检查
因为重启docker了,所以需要把docker-compose 也都启起来:docker-compose up -d
再次推送:
[root@VM-0-14-centos harbor]# docker tag nginx:latest 175.27.229.160/library/nginx:latest
[root@VM-0-14-centos harbor]# docker push 175.27.229.160/library/nginx:latest
提示:denied: requested access to the resource is denied
解决方式:先登录 docker login 域名或者ip
docker login ip 输入 harbor 账号密码就可以了
登录成功:
登录成功之后会有一个认证信息:路径:/root/.docker/config.json
cat /root/.docker/config.json
再次推送:
安装 gitlab
使用 git 来管理代码,安装方式使用 docker:
docker run -d \--name gitlab \-p 8443:443 \-p 9999:80 \-p 9998:22 \-v $PWD/config:/etc/gitlab \-v $PWD/logs:/var/log/gitlab \-v $PWD/data:/var/opt/gitlab \-v /etc/localtime:/etc/localtime \lizhenliang/gitlab-ce-zh:latest
这里我找了一个测试项目,你们自己也可以找一些 java、python项目来做。
步骤:1.创建代码仓库2.将项目代码提交到该仓库中
后续会在 jenkins 中使用 pipeline 时会从 git 上面拉取代码进行持续的 CI/CD
安装 jenkins
前置工作:
# tar zxvf jdk-8u45-linux-x64.tar.gz
# mv jdk1.8.0_45 /usr/local
# tar zxf apache-maven-3.5.0-bin.tar.gz
# mv apache-maven-3.5.0 /usr/local
安装jenkins:
docker run -d --name jenkins -p 81:8080 -p 50000:50000 -u root \-v /opt/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/local/python3/Python-3.6.2:/usr/local/python3/Python-3.6.2 \-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \-v /usr/bin/docker:/usr/bin/docker \-v /usr/local/apache-maven-3.5.0:/usr/local/maven \-v /usr/local/jdk1.8.0_45:/usr/local/jdk \-v /etc/localtime:/etc/localtime \--name jenkins jenkins/jenkins:lts
查看密码:
docker logs jenkins
安装插件:
1.git
2.pipeline
3.local 如果想中文显示可以安装这个插件
安装 git pipeline 如果安装慢可以更换Jenkins源:
sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json,
路径是:/opt/jenkins_home/updates 必须要进入这个目录下 重启jenkins
新建一个 pipeline 项目:
编写 pipeline:
#!/usr/bin/env groovydef registry = "" //自己的harbor仓库地址
def project = "welcome" //项目名
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}" //镜像名称
def git_address = "" //自己的git地址
def docker_registry_auth = "" //登录 harbor 的凭证
def git_auth = "" //登录 git 的凭证pipeline {agent anystages {stage('拉取代码'){steps {checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])}}stage('代码编译'){steps {sh """JAVA_HOME=/usr/local/jdkPATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATHmvn clean package -Dmaven.test.skip=true""" }}stage('构建镜像'){steps {withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {sh """echo 'FROM ${registry}/library/tomcat:v1RUN rm -rf /usr/local/tomcat/webapps/*ADD target/*.war /usr/local/tomcat/webapps/ROOT.war' > Dockerfiledocker build -t ${image_name} .docker login -u ${username} -p '${password}' ${registry}docker push ${image_name}"""}} }stage('部署到Docker'){steps {sh """docker rm -f tomcat-java-demo |truedocker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}"""}}}
}
需要获取两个凭证信息,harbor 和 git:
构建成功:构建镜像用了29分钟,哈哈~~~,我这边网络不太好
相关文献
docker 基础:https://blog.csdn.net/qq_39253370/article/details/115430300
docker 监控:https://blog.csdn.net/qq_39253370/article/details/115552178
docker :https://yeasy.gitbook.io/docker_practice/
搭建基于 Docker 的 CI/CD相关推荐
- 基于docker的CI/CD
准备条件 使用docker的机器,添加用户时需要指定用户的uid : sudo groupadd -g 500 work && useradd -g 500 -u 500 work ...
- Docker + GitLab CI/CD 实现自动化部署
使用Docker+gitlab ci/cd 实现自动化部署 文章目录 使用Docker+gitlab ci/cd 实现自动化部署 1. Docker 1.1 Docker是什么? 1.2 Docker ...
- Jenkins X:基于Kubernetes的CI/CD平台
背景 Jenkins自动化服务器一直都是DevOps工具链的重要组成部分,并且已发展成为开源持续集成和持续部署(CI&CD)软件的领导者.据不完全统计,截至2019年6月,已有将近26万的Je ...
- 搭建基于Docker社区版的Kubernetes本地集群
搭建基于Docker社区版的Kubernetes本地集群 原文:搭建基于Docker社区版的Kubernetes本地集群 Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于 ...
- 基于 Kubernetes 实现 CI/CD 配置
基于 Kubernetes 实现 CI/CD 配置 一.基本介绍 二.基于 Kubernetes 实现 CI/CD 配置 1.配置 GitLab 2.配置 Jenkins 3.实现 CI/CD 配置 ...
- 『中级篇』docker之CI/CD持续集成-项目生成镜像(76)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之CI/CD持续集成-项目生成镜像(76) 开始想用docker registry做私有镜像库,后来放弃 ...
- 『中级篇』docker之CI/CD持续集成-(终结篇)(77)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之CI/CD持续集成-(终结篇)(77) 今天是中级终结篇的最后一次了,想想在二个月的时间,每天的坚持学 ...
- 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
深度学习在哪里? 我们已然生活在数字时代,一天24小时我们被数字包围.我们生活中的方方面面都在使用数字来表达.传递.存储.我们无时无刻不在接收数字信息,而又无时无刻不在生产数字信息. 在数字世界中,可 ...
- docker GitLab-runner CI/CD持续集成
docker GitLab-runner CI/CD持续集成 docker GitLab-runner CI/CD持续集成 机器配置 gitlab安装 拉取镜像 创建挂载目录 启动容器 注册gitla ...
- 【Mysql】数据库主从搭建-基于docker
后台可回复[1024]即可获取相关宝藏内容分享 :) 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docke ...
最新文章
- jquery的live方法
- 类的继承和派生java_类的继承和派生
- 世界最厉害的14位程序员,你认识几个?
- SQLserver语句命令
- html日历显示不完整,求html代码,显示日历和时间的代码
- SharePoint Permission中6个表的关联关系**
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
- 从Soul APP 看社交升级新玩法
- 2021年大连12中高考成绩查询,2021大连市地区高考成绩排名查询,大连市高考各高中成绩喜报榜单...
- A Tutorial on Learned Multi-dimensional Indexes
- 打工不如当老板,注册公司费用和步骤
- 首批 | 易知微加入“新华网元宇宙及 AIGC 创新联盟”,探索AIGC数字人深度应用
- Windows下安装VMware
- CD-Hit 生信 碱基序列去除冗余的方法
- 知识共享有多难?做好这几点,问题统统解决
- VS2019试用期结束怎么办
- 「文献」杂合基因组的策略思路
- 人脸识别考勤系统解决方案
- 2,JESD204为什么值得关注?
- (二)巴菲特与索罗斯的投资习惯:七种致命的投资信念
热门文章
- ps怎么做玻璃破碎碎片飞溅效果
- VMware安装FusionComputer
- 如何联系海外网红?4个方法助你提高海外网红回复率
- 介入治疗在胰腺癌的作用
- android webview播放视频黑屏
- mac端锐捷无法验证服务器,还在为mac无法用锐捷认证校园网登陆而郁闷吗?
- java无法找到加载主类是什么意思_java – 什么是“找不到或加载主类”是什么意思?...
- 完美解决MATLAB建立新文件没有权限问题
- 计算机管理无线网络 win10,如何在Windows 10中使用命令行管理WIFI无线网络
- 3533: 黑白图像