CI 、CD引言
项目部署
将项目通过maven进行编译打包
将文件上传到指定的服务器中
将war包放到tomcat的目录中
通过Dockerfile将Tomcat和war包转成一个镜像,由DockerCompose去运行容器
项目更新后,需要将上述流程再次的从头到尾的执行一次,如果每次更新一次都执行一次上述操作,很费时,费力。我们就可以通过CI、CD帮助我们实现持续集成,持续交付和部署。
CI介绍
CI(continuous intergration)持续集成
持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并且测试。
快速发现错误。
防止代码偏离主分支。
搭建Gitlab服务器
实现CI,需要使用到Gitlab远程仓库,先通过Docker搭建Gitlab
准备工作
创建一个全新的虚拟机,并且至少指定4G的运行内存,4G运行内存是Gitlab推荐的内存大小。
并且安装Docker以及Docker-Compose
修改ssh的22端口
将ssh的默认22端口,修改为60022端口,因为Gitlab需要占用22端口
vi /etc/ssh/sshd_config
PORT 22 -> 60022
systemctl restart sshd
编写docker-compose.yml
docker-compose.yml文件去安装gitlab(下载和运行的时间比较长的)
ip改为自己的ip
version: '3.1'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
container_name: "gitlab"
restart: always
privileged: true
hostname: 'gitlab'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.75.135'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 22
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- /opt/docker_gitlab/config:/etc/gitlab
- /opt/docker_gitlab/data:/var/opt/gitlab
- /opt/docker_gitlab/logs:/var/log/gitlab
搭建GitlabRunner
准备环境
创建工作目录
/opt/docker_gitlab-runner
将提供好的
docker-compose.yml
文件以及environment
目录全部复制到上述目录中在宿主机启动docker程序后先执行
sudo chown root:root /var/run/docker.sock
(如果重启过 docker,重新执行)在
/opt/docker_gitlab-runner
目录中执行docker-compose up -d
启动容器
environment 目录
提供的 yml
启动完成之后 gitlab-runner 安装完毕,但是该容器还缺少以下环境
jdk
maven
docker-compose
gitlab-runner容器中安装jdk
#切到environment 目录下
cd environment
#复制jdk到gitlab-runner容器中 //这里的dd1 是gitlab-runner容器的id
docker cp jdk-8u231-linux-x64.tar.gz dd1:/usr/local/jdk/
#进入gitlib-runner 容器
docker exec -it gitlab-runner的id bash#进入容器jdk目录
cd /usr/local/jdk#解压 jdk
tar -zxvf jdk-8u231-linux-x64.tar.gz
配置环境变量echo "export JAVA_HOME=/usr/local/jdk/jdk1.8.0_231" >>/etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >>/etc/profile
#使环境变量生效
source /etc/profile#任意目录查看 是否成功
java -version容器内部没有jdk目录要进去创建
容器中安装 maven
#复制maven压缩包
docker cp apache-maven-3.6.3-bin.tar.gz dd1:/usr/local/mvn/
#进入gitlib-runner 容器
docker exec -it gitlab-runner的id bash
#进入容器maven目录
cd /usr/local/mvn
#解压maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz
#查看maven目录
pwd容器内部也没有mvn 也要创建
容器中安装docker-compose
#复制docker-compose 到容器内部
docker cp docker-compose dd1:/usr/local/bin/
#进入gitlib-runner 容器
docker exec -it gitlab-runner的id bash#进入docker-compose安装目录
cd /usr/local/bin/#授权
chmod 777 docker-compose#任意目录测试 docker-compose
docker-compose
访问gitlab
直接写宿主ip访问
获得url 跟令牌
第一次注册 默认用户是 root 你写个密码就行
#添加容器权限,保证容器可以使用宿主机的
docker exec -it gitlab-runner usermod -aG root gitlab-runner#注册Runner信息到gitlab
docker exec -it gitlab-runner gitlab-runner register
输入url 令牌 脚本选择shell tags deploy
安装完成
整合项目入门测试
创建maven工程,添加web.xml文件,编写html页面
dockerfile
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY TestCI.war /usr/local/tomcat/webapps
docker-compos.yml
version: "3.1"
services:
#服务名
testci:
build: docker
restart: always
# 容器名
container_name: testci
ports:
- 8080:8080
.gitlab-ci.yml
stages:
- test
test:
stage: test
script:
- echo first test ci
- /usr/local/mvn/apache-maven-3.6.3/bin/mvn package
- cp target/TestCI.war docker/TestCI.war
- docker-compose down
- docker-compose up -d --build
tags:
- deploy
gitlab 创建项目 获得远程链接
这个idea项目相当于创建了一个 testci的容器
项目变成 git ,提交上传到远程仓库
这时候,只要改变idea,提交,上传 ,远程仓库就可以收到