gitlab + docker持续集成环境搭建

前言

目前接触持续集成环境,主要是为了方便开发测试环境,提交代码的时候,自动测试、编译、打包、部署到开发/测试环境,省去了很多开发测试环境调试部署的时间。另外也可以直接打成线上使用的war包,直接扔给运维即可。

环境介绍

两台vmware虚拟机,系统为centos 7.5,ip分布如下:

192.168.0.114    /*gitlab-runner所在机器*/
192.168.0.115    /*gitlab所在机器*/

192.168.0.114 环境: maven-3.5.4jdk-1.8 gitlab-runner
192.168.0.115 安装的gitlab版本是:企业版11.2.1-ee 免费使用版本
本机和192.168.0.114配置hosts:

192.168.0.115  gitlab.example.com

后续都通过gitlab.example.com访问gitlab

gitlab安装 - 192.168.0.115

安装依赖

sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

这里如果你可以直接把防火墙关闭,就无需执行firewall相关配置了。

配置邮件服务相关依赖

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

添加gitlab仓库

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

安装

sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ee

其中http://gitlab.example.com 就是安装完毕之后,访问gitlab的地址,根据需要设置。

登录

本机打开浏览器访问http://gitlab.example.com[注意要配置hosts]
初次打开502错误,而且异常卡慢,有几个可能的原因:
1. 端口被占用,8080端口是否被占用
2. 内存太小
3. 超时时间太短
于是把虚拟机内存调到5G并且修改配置vim /etc/gitlab/gitlab.rb

 unicorn['worker_timeout'] = 150
 unicorn['worker_processes'] = 2
 unicorn['port'] = 8081

调整完之后执行命令:sudo gitlab-ctl reconfigure
重新访问,一切正常,初次会跳转到修改密码页面,用户名默认为root

创建一个项目

跟创建github仓库一样,待会写的代码全部提交到gitlab中。在项目页面点击下图中的EnableAuto DevOps:
gitlab + docker持续集成环境搭建_第1张图片
然后:
gitlab + docker持续集成环境搭建_第2张图片
会看下如下界面:
gitlab + docker持续集成环境搭建_第3张图片
这里的token我们待会要用到

gitlab-runner -192.168.0.114

安装

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner

更多安装信息访问:gitlab-runner安装

注册gitlab-runner与gitlab关联

sudo gitlab-runner register
/*Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )*/
http://gitlab.example.com  /*记得这台机器也要配置hosts*/
/*Please enter the gitlab-ci token for this runner*/
Pnm2DEVTzo7__yCkdBwH /*token的获取在上面有提到*/
/*Please enter the gitlab-ci description for this runner*/
test
/*Please enter the gitlab-ci tags for this runner (comma separated):*/
test
/*Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:*/
shell   /*这里根据需要选择,我目前选择的是shell*/
/*如果选择docker,才会有下面这一步*/
Please enter the Docker image (eg. ruby:2.1):
xxx:latest

下载docker tomcat镜像

有关docker的安装与使用这里不再赘述
我这里用到的是我自己封装好的一个镜像:lchpersonal/tomcat8-jdk8:v1 这个镜像在docker hub仓库上。此镜像定制了数据卷的映射,把宿主机器的/home/site映射到容器中的/usr/local/tomcat/webapps/ROOT,以便tomcat启动的时候加载我们的项目。

编写代码

本文以一个简单的web项目为例,代码会在下文给出github地址,其实随便一个能跑通的web项目都行。主要是讲解根目录中的.gitlab.yml文件:

/*定义的一些变量,以便下文使用*/
variables:
  siteName: "citest"
  imagesName: "lchpersonal/tomcat8-jdk8:v1"
  containerName: "gitlabtest_container"
  siteLocation: "/home/site"
  containerSiteLocation: "/usr/local/tomcat/webapps/ROOT"
  host_port: "8082"
  container_port: "8080"

#之前的版本,这个cache放到devDeploy最后面也是生效的。此版本用的是11.2.1-ee,却不行
/*此yml分为两个阶段,一个是编译,一个是打包,所以这里是将编译的文件缓存,以便下一个阶段使用,否则会被删除,部署的时候就会提示找不到文件*/
cache:
    key: "CI_BUILD_STAGE"
    paths:
    - target/
/*在所有脚本执行之前执行,就是简单的命令*/
before_script:
# 关闭docker容器,删除容器
- if [ "$(docker ps | grep $containerName)" ]; then
- docker stop $containerName
- docker rm -f $containerName
- fi
# 清理项目目录
- if [ -d "$siteLocation/$siteName" ]; then
- sudo rm -rf $siteLocation/$siteName
- fi
- sudo mkdir -p $siteLocation/$siteName

devBuild:
  stage: build
  script:
  - mvn clean package -DskipTests -U
  /*下面两个命令是为了调试而用*/
  - pwd
  - ls
  only:
  - master
  tags:
  - test

devDeploy:
  stage: deploy
  script:
  - pwd
  - sudo cp target/$siteName.war $siteLocation/
  - unzip -qo $siteLocation/$siteName.war -d $siteLocation/$siteName/
  - docker run -d -p $host_port:$container_port --name $containerName -v $siteLocation/$siteName:$containerSiteLocation $imagesName catalina.sh run
  # - sudo rm $siteLocation/$siteName.war
  only:
  - master
  tags:
  - test

加入此文件之后,将项目推送至gitlab,此时gitlab就会通知在这个项目上注册的gitlab-runner,由gitlab-runner来执行此yml脚本。
在pipleline界面会看到项目编译运行的信息以及结果:
gitlab + docker持续集成环境搭建_第4张图片

可以看出在Stages确实分为两个阶段运行,的表示通过,×的表示为失败,点击进去能看到具体报错信息:
gitlab + docker持续集成环境搭建_第5张图片
部署成功会显示:
gitlab + docker持续集成环境搭建_第6张图片

测试

访问:http://192.168.0.114:8082/ 测试项目是否部署成功
gitlab + docker持续集成环境搭建_第7张图片

源码地址:https://github.com/lchpersonal/gitlab-ci

你可能感兴趣的:(docker)