1.前言
最近申请了华为云的服务器,闲来无事搭建一个简单的CI+Docker自动部署的样例,中间花费了两天时间四处百度解决各种问题,终于是做成了。记录下过程对搭建过程做一个复盘。
2.Linux搭建Gitlab
现在很多公司都是使用开源的Gitlab作为公司代码管理工具,并且Gitlab中集成了Runner便于后面搭建CI相关环境。所以需要先搭建Gitlab.
由于是自己的云服务器,直接使用root账号连接云服务器
1. 安装gitlab
[root@gitlab ~]# yum install -y curl policycoreutils-python openssh-server #安装依赖
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm #下载软件包
[root@gitlab ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm #安装gitlab
如图上所示就gitlab就安装成功了
2. 修改默认的gitlab访问地址
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #编辑配置文件
#改为自己的IP地址 也可以添加端口,默认端口为80,如果服务器80端口占用就需要修改
external_url 'http://192.168.0.112:9092'
[root@gitlab ~]# gitlab-ctl reconfigure #重新加载配置文件
3.访问
直接输入http://192.168.0.112:9092地址访问,默认账号为root 默认密码为5iveL!fe
第一次登录后会提示修改密码,这样Gitlab就搭建好了 如果需要汉化
4. 汉化
由于当前的英语版本,Gitlab也可以支持中文需要重新按照gitlab汉化包
下载汉化补丁
[root@gitlab ~]# git clone https://gitlab.com/xhang/gitlab.git
[root@gitlab ~]# cd gitlab
查看全部分支版本
[root@gitlab ~]# git branch -a
对比版本、生成补丁包
[root@gitlab ~]# git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > /tmp/10.2.2-zh.diff
停止服务器
[root@gitlab ~]# gitlab-ctl stop
打补丁
[root@gitlab ~]# patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff
启动和重新配置
[root@gitlab ~]# gitlab-ctl start
[root@gitlab ~]# gitlab-ctl reconfigure
3.Linux搭建Docker
1.安装Docker
#查看是否已安装docker列表
yum list installed | grep docker
# 安装docker 默认安装最新版本 在docker后面也可指定版本号 -y表示不询问安装一直到安装成功
yum -y install docker
# 启动docker
systemctl start docker
# 暂停docker
systemctl stop docker
# 查看docker状态
systemctl status docker
# 设置为docker开机自启动
systemctl enable docker.service
2. 安装GitlabCI自动部署Runner
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
$ yum install gitlab-ci-multi-runner
3. Gitlab项目指定runner
$ gitlab-ci-multi-runner register
下面为注册runner的步骤
#引导会让你输入gitlab的url,输入自己的url,例如http://gitlab.example.com/
#引导会让你输入token,去相应的项目下找到token,例如ase12c235qazd32
#引导会让你输入tag,一个项目可能有多个runner,是根据tag来区别runner的,输入若干个就好了,比如web,hook,deploy
#引导会问你是否无tag也触发自动部署,我这里为了方便测试,选择的true
#引导会问你是否锁定此runner仅为此项目锁定,我这里选的默认否
#引导会让你输入executor,这个是要用什么方式来执行脚本,输入shell就好了。
4.创建项目
1. 创建测试项目
需要在pom文件中配置下列参数 配置jar包名称和docker镜像名称
2.构建Docker镜像 创建Dockerfile文件
在pom文件中dockerDirectory中指定目录下创建Dockerfile文件
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
FROM:指定基础镜像,必须为第一个命令 一般Java项目都指定openJDK
MAINTAINER: 维护者信息
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
ENV:设置环境变量
EXPOSE:指定于外界交互的端口
# 示例
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD cutomer-docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.创建.gitlab-ci.yml
# 脚本执行之后删除该镜像(为了不与下次镜像打包冲突)
after_script:
- docker rmi $( docker images -q -f dangling=true)
#定义几个流程(job),这里是定义了三个自动化流程
stages:
- dev
job_deploy:
# 指定流程
stage: dev
script:
# 通过Dockerfile生成镜像
- mvn package docker:build
# 删除已经在运行的容器
- if [ $(docker ps -aq --filter name=cutomer-docker) ]; then docker rm -f cutomer-docker;fi
# 通过镜像启动容器,并把本机端口映射到容器端口
- docker run -d -p 8070:8080 --name cutomer-docker springboot/cutomer-docker
only:
# 指定gitlab分支名称
- dev
推送到代码到Gitlab中可以看到
4. 启动成功可以在服务器中查看
# 查看镜像
docker images
#查看容器列表
docker ps
#查看容器日志
docker logs -f -t --tail 50 容器名称 后面是容器名称
#进入容器
docker exec -it 容器名称 sh