Docker教程---CI持续集成
一、引言
项目部署:
1、将项目通过maven进行编译打包
2、将文件上传到指定的服务器中
3、将war包放到tomcat的目录中
4、通过Dockerfile将Tomcat和war包转成一个镜像,由DockerCompose去运行容器
二、CI介绍
CI(continuous intergration)持续集成
持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并测试。
优点:
快速发现错误
防止代码偏离主分支
三、实现持续集成
1、创建一个全新的虚拟机,并且至少4G的运行内存 IP地址:10.0.0.11
2、安装docker以及docker-compose
systemctl disable firewalld systemctl stop firewalld setenforce 0 yum -y install yum-utils device-mapper-persisten-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makacache fast yum -y install docker-ce systemctl start docker 启动docker systemctl enable docker 设置开机自启 docker run hello-world 测试
安装docker-compose见上一篇文章
3、docker-compose.yml文件去安装gitlab
mkdir /opt/docker_gitlab vim docker-compose.yml version: '3.1' services: gitlad: 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://10.0.0.11' gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['smtp_enable'] = true gitlab_rails['gitlab_shell_ssh_port'] = 22 #gitlab_rails['initial_root_password'] = 'Admin@123456' #官网镜像需要设置密码,此镜像不需要 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 vim /etc/ssh/sshd_config 修改ssh监听端口号为60022,解决映射冲突 Port 60022 systemctl restart sshd 重启服务 docker-compose up -d docker构建gitlab服务(下载和运行是比较慢的)
验证,默认使用80端口
设置密码,并登录,默认账户是root,密码我设置得是password。
新版本有修改端口号得看下面得配置文件
version: '3' services: gitlab: image: 'gitlab/gitlab-ce' container_name: "gitlab" restart: always hostname: 'harbor' environment: TZ: 'Asia/Shanghai' GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.5.189:1080' # web站点访问地址 gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['smtp_enable'] = true gitlab_rails['initial_root_password'] = 'Admin@123456' ports: - '1080:1080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问 - '1443:443' - '1022:22' volumes: - ./config:/etc/gitlab - ./data:/var/opt/gitlab - ./logs:/var/log/gitlab logging: driver: "json-file" options: max-size: "2g" max-file: "2"
4、安装gitlab-tunner
使用IP:10.0.0.31
安装apache-maven、jdk
http://49.233.184.186/fdb/soft1/jdk-8u251-linux-x64.tar.gz?cr=2508131169&r=0.31045177099010024 tar -zxvf jdk-8u251-linux-x64.tar.gz rm -rf jdk-8u251-linux-x64.tar.gz
wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
cp apache-maven-3.5.3-bin.tar.gz /usr/local/maven
tar -zxvf apache-maven-3.5.3-bin.tar.gz
rm -fr apache-maven-3.5.3-bin.tar.gz
配置环境变量
JAVA_HOME=/usr/local/java/jdk1.8.0_251 MAVEN_HOME=/usr/local/maven/apache-maven-3.5.3 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:/usr/local/bin/
安装gitlab-runner服务,并在容器里面配置环境变量,使其可以运行命令
mkdir /opt/docker_gitlab-runner cd /opt/docker_gitlab-runner vim docker-compose.yml version: '3.1' services: runner: image: 'gitlab/gitlab-runner:v11.4.2' container_name: gitlab-runner restart: always volumes: - /opt/docker_gitlab-runner/config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock - /usr/local/maven/apache-maven-3.5.3:/usr/local/maven/apache-maven-3.5.3 - /usr/local/java/jdk1.8.0_251:/usr/local/java/jdk1.8.0_251 - /usr/local/bin:/usr/local/bin - /usr/bin/docker:/usr/bin/docker
在宿主机启动docker程序后先执行,如果重启过docker,重新执行
chown root:root /var/run/docker.sock
在/opt/docker_gitlab-runner目录中执行
docker-compose up -d --build
添加容器权限,保证容器可以使用宿主机的docker
docker exec -it gitlab-runner usermod -aG root gitlab-runner
四、关联gitlab项目
1、gitlab创建项目
2、注册gitlab-runner
[root@computer ~]# docker exec -it gitlab-runner gitlab-runner register Runtime platform arch=amd64 os=linux pid=25 revision=cf91d5e1 version=11.4.2 Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): 项目集成CI地址 http://10.0.0.11/ Please enter the gitlab-ci token for this runner: 项目集成CI注册令牌 ickaCtLRCympzbEwtyoH Please enter the gitlab-ci description for this runner: 添加描述 [b0e7c9960f0b]: testcijicheng Please enter the gitlab-ci tags for this runner (comma separated): 添加tag deploy Registering runner... succeeded runner=ickaCtLR Please enter the executor: shell, virtualbox, kubernetes, docker, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine: 以什么方式执行,选sehll shell Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
刷新页面,再次点击展开Runner
五、整合项目入门测试
1、创建maven工程,编写html页面
创建一个简单的maven工程
填写项目名称
指定打包方式,在右下角导入包
复制这个目录
替换这个这个目录
在webapp下面新建一个inde.html页面
记得在这一步前:先配置好intellij IDEA和tomcat、jdk
导入包
创建一个本地的gitlab仓库
添加到暂存区
记得在这一步前:先配置好intellij IDEA和git
添加到本地gitlab仓库
2、将maven工程推送到gitlab中
输入刚才复制的http的路径
接着输入账户和密码:root/password。
刷新页面,就能看到刚提交的代码
3、编写gitlab-ci.yml文件
项目添加.gitlab-ci.yml文件
添加一下内容
stages:
- test
test:
stage:
script:
- echo first test ci
然后提交到到gitlab上,刷新gitlab服务器内容
4、可以在gitlab中查看到gitlab-ci.yml编写的内容
注意:记得把jdk、mvn安装路径写入容器得环境变量里面,mvn打包运行需要mvn
docker exec -it gitlab-runner /bin/bash apt-get update apt-get install -y vim vim /etc/profile JAVA_HOME=/usr/local/java/jdk1.8.0_251 MAVEN_HOME=/usr/local/maven/apache-maven-3.5.3 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:/usr/local/bin/
source /etc/profile
六、CI持续集成实现
1、编写.gitlab-ci.yml
找到mvn打包得路径,添加打包命令
stages: - dev - test - deploy dev: stage: dev ###执行阶段 tags: - "dev" #指定带有dev标签的gitlab-runner运行此步骤 script: - echo first test ci - /usr/local/maven/apache-maven-3.5.3/bin/mvn package only: - tags #只有配置了tags号才能触发这个步骤
提交代码至gitlab上,自动执行流水线
项目中创建一个docker目录
在docker下创建一个Dockerfile文件
添加如下内容
FROM daocloud.io/library/tomcat:8.5.15-jre8 COPY testci.war /usr/local/tomcat/webapps
同级目录下创建docker-compose.yml文件
version : "3.1" services: testci: build: docker restart: always container_name: testci ports: - 8080:8080
在.gitlab-ci.yml下添加如下内容
- cp target/testci-1.0-SNAPSHOT.war docker/testci.war 复制war - docker-compose down 先删除正在运行得容器 - docker-compose up -d --build 启动一个新容器 - docker rmi $(docker images -qf dangling=true) 删除所有名字为none的镜像
提交代码之后,访问浏览器:http://ip:8080端口就能看到项目效果了。