最近team内对k8s,docker比较感兴趣,想了解CI/CD相关的内容,我争取了该任务,做了些相关的工作,研究了大概一个礼拜,初步完成了从gitlab代码提交用docker自动发布版本的工作(还未涉及k8s),在此记录
一 涉及到的软件版本
版本 | 介绍 | |
docker | 19.03.8 | 不知道的不用往下看了 |
git | 2.28.0 windows | 分布式版本控制系统 |
gitlab | 12.5.5 | 一个用于仓库管理系统的开源项目,使用Git作为代码管理工具 |
gitlab-runner | 12.8.0 | gitlab提供的持续集成工具 |
harbor | v2.1.0-rc2 | 一个用于存储和分发Docker镜像的企业级Registry服务器 |
服务器环境是centos7
二 第一步:本地安装git
会有很多步骤的选项,一路next安装。安装完毕,右键可以看到出现了git相关的指令
三 第二步:在gitlab创建项目,并上传本地代码
我使用的是公司的gitlab仓库,是安装好的,因此不需要安装了。创建gitlab项目
git上传本地代码流程参考:
上传成功后如下
四 安装gitlab-runner,并注册。参照上一篇文章
【gitlab-runner】gitlab-runner安装注册到https的gitlab_为什么gitlab-runner要使用certificates-CSDN博客
五 编写yml文件命令
点击CI/CD configration,会创建yml命令文件,可以编写简单的语句测试下runner是否有效
#定义过程
stages:
- build //可自定义
- test
#定义job
init5:
stage: build //定义job的执行阶段
tags: //重要,这个标签是指定本job使用哪个标签的runner来执行,可以为空,为空则没有标签的runner会执行
- idat
script: //shell脚本,这里到时会用来build java项目,并且用docker打包镜像
- echo 'init ok' > /etc/gitlab-runner/b.log
- pwd
testcase:
stage: test
tags:
- idat
script:
- echo 'test ok' > /etc/gitlab-runner/c.log
修改之后保存yml,去查看CI/CD界面,可以看到新的pipeline创建了,点进去可以查看到job的执行信息
然后在runner的机器/etc/gitlab-runner可以看到输出的log文件
如此则说明runner运行成功了!
六 打包项目,docker创建镜像并发布
在第五步runner创建成功后,会在runner服务器下载项目的代码,地址在/etc/gitlab-runner/builds/Q_zurexD/0/Hadoop/idap
我的项目是javaweb项目,可以用java的jar命令打包,因为jar命令只是对文件进行打包,没有编译,因此在提交代码的时候需要将WebContent/WEB-INF/下的class文件提交,打包时进去WebContent目录,使用下面的命令打成war包,打成war放到tomcat的webapp下面
jar -cvf /root/javaweb/apache-tomcat-8.5.42/webapps/idat.war ./*
接下去用docker打包镜像并发布
首先把java需要的环境jdk,tomcat放到指定目录/root/javaweb,结合上面的的war包,tomcat下面是有war包的
编写Dockerfile
#创建操作系统环境
FROM centos
#自定义描述
MAINTAINER 682556
#创建容器目录
RUN mkdir -p /opt
#将本地java环境打入容器
ADD java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64 /opt/jdk
#将本地tomcat(含war包)环境打入容器
ADD apache-tomcat-8.5.42 /opt/tomcat
#设置java,tomcat环境
ENV JAVA_HOME /opt/jdk
ENV CATALINA_HOME /opt/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
#绑定端口。这里端口自定义,且需要在tomcat server.xml文件中也改成相同端口,切记
EXPOSE 8099
#释放目录,这步不一定要用。我在做的时候,在执行/opt/tomcat/bin/catalina.sh命令时,显示权限不够,因此在这释放目录
RUN chmod -R 777 /opt
#启动tomcat
CMD ["/opt/tomcat/bin/catalina.sh","run"]
docker打包镜像
docker build -t idat2 .
docker启动镜像
docker run -d -p 8099:8099 --name idat2 idat2:latest
访问页面
整个第六步需要结合gitlab-runner自动发布,那么将上面的步骤写入yml,就可以实现自动发布
stages:
- build
- image
- run
buildwar:
stage: build
tags:
- idat
only
- master
script:
- echo 'build start'
- pwd
- cd WebContent
- rm -f /root/javaweb/apache-tomcat-8.5.42/webapps/idat.war
- jar -cvf /root/javaweb/apache-tomcat-8.5.42/webapps/idat.war ./*
- echo 'build end'
buildimage:
stage: image
tags:
- idat
script:
- echo 'image start'
- cd /root/javaweb
- docker build -t idat2 .
runapp:
stage: run
tags:
- idat
script:
- docker run -d -p 8099:8099 --name idat2 idat2:latest
自动发布完成!
七 镜像导入私有仓库
官方的registry仓库没有权限控制,可以使用Harbor仓库
Harbor的安装比较简单,下载地址https://github.com/goharbor/harbor/releases
下载后直接解压,修改/root/harbor/harbor.yml文件
要启动harbor还需要docker-compose的支持,按照下面命令安装
curl -L https://github.com/docker/compose/releases/download/1.27.0/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
安装完成之后,启动harbor,要等几分钟
./install.sh
访问harbor,使用admin/Harbor12345登录
镜像导入harbor命令
docker login -u admin -p Harbor12345 10.38.150.64:8090
docker tag idat2:latest 10.38.150.64:8090/library/idat2:latest
docker push 10.38.150.64:8090/library/idat2:latest
docker login harbor时可能报错
添加网站信任,修改"insecure-registries"属性,将harbor地址添加进去
vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://dockerhub.azk8s.cn", "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com/", "https://registry.docker-cn.com"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"insecure-registries": ["127.0.0.1/8","10.38.150.64:8090"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
重启docker服务,重新登录harbor成功
systemctl restart docker
查看harbor,idat2的项目已经上传