九、CI、CD介绍及准备
1.CI、CD引言
项目部署
1.将项目通过maven进行编译打包
2.将文件上传到指定的服务器中
3.将war包放到tomcat的目录中
4.通过Dockerfile将Tomcat和war包转成一个镜像,由DockerCompose去运行容器
项目更新后,需要将上述流程再次的从头到尾的执行一次,如果每次更新一次都执行一次上述操作,很费时,费力。我们就可以通过CI、CD帮助我们实现持续集成,持续交付和部署
2.CI介绍
CI(continuous intergration)持续集成
持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并且测试。
1.快速发现错误。
2.防止代码偏离主分支。
3.搭建Gitlab服务器
3.1.准备环境
实现CI,需要使用到Gitlab远程仓库,先通过Docker搭建Gitlab
创建一个全新的虚拟机,并且至少指定4G的运行内存,4G运行内存是Gitlab推荐的内存大小。
并且安装Docker以及Docker-Compose
3.2 修改ssh的22端口
#将ssh的默认22端口,修改为60022端口,因为Gitlab需要占用22端口 vi /etc/ssh/sshd_config PORT 22 -> 60022 systemctl restart sshd
3.3 编写docker-compose.yml
docker-compose.yml文件去安装gitlab(下载和运行的时间比较长的) 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.199.110' 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
1.准备文件
daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": [ip:ports] } 文件夹 environment里面准备maven安装包,jdk1.8安装包,Dockerfile,daemon.json以及docker-compose
2.开始搭建
创建工作目录 /usr/local/docker_gitlab-runner
将docker-compose.yml文件以及environment目录全部复制到上述目录中
在宿主机启动docker程序后先执行 sudo chown root:root /var/run/docker.sock (如果重启过 docker,重新执行)
在/usr/local/docker_gitlab-runner 目录中执行docker-compose up -d –build 启动容器
添加容器权限,保证容器可以使用宿主机的dockerdocker exec -it gitlab-runner usermod -aG root gitlab-runner
注册Runner信息到gitlab
3.进入后续步骤
docker exec -it gitlab-runner gitlab-runner register # 输入 GitLab 地址 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://192.168.199.109/ # 输入 GitLab Token Please enter the gitlab-ci token for this runner: 1Lxq_f1NRfCfeNbE5WRh # 输入 Runner 的说明 Please enter the gitlab-ci description for this runner: 可以为空 # 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci Please enter the gitlab-ci tags for this runner (comma separated): deploy # 这里选择 true ,可以用于代码上传后直接执行(根据版本,也会没有次选项) Whether to run untagged builds [true/false]: true # 这里选择 false,可以直接回车,默认为 false(根据版本,也会没有次选项) Whether to lock Runner to current project [true/false]: false # 选择 runner 执行器,这里我们选择的是 shell Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh: shell
十一、整合项目入门测试
1.创建项目
创建maven工程,添加web.xml文件,编写HTML页面
2.编写.gitlab-ci.yml文件
stages: - test test: stage: test script: - echo first test ci # 输入的命令
3.将maven工程推送到gitlab中
执行git命令推送到Gitlab git push origin master
4.查看效果
可以在gitlab中查看到gitlab-ci.yml编写的内容
十二、完善项目配置
添加Dockerfile以及docker-compose.yml, 并修改.gitlab-ci.yml文件
1.创建Dockerfile
# Dockerfile FROM daocloud.io/library/tomcat:8.5.15-jre8 COPY testci.war /usr/local/tomcat/webapps
2.创建docker-compose.yml
# docker-compose.yml version: "3.1" services: testci: build: docker restart: always container_name: testci ports: - 8080:8080
3.修改.gitlab-ci.yml
# ci.yml stages: - test test: stage: test script: - echo first test ci - /usr/local/maven/apache-maven-3.6.3/bin/mvn package - cp target/testci-1.0-SNAPSHOT.war docker/testci.war - docker-compose down - docker-compose up -d --build - docker rmi $(docker images -qf dangling=true)
剩下的是Jenkins+Gitlib实现自动化部署上线,我的博客有单独的文章介绍自动化部署,感兴趣的小伙伴可以学习学习。
Gitlib文章:https://www.lixian.fun/category/devops/gitlib
Jenkins文章:https://www.lixian.fun/category/devops/jenkins