前端CI/CD之Docker备忘

这段时间花了一些精力在研究前端CI/CD相关的东西。在搭建环境前,刚好看到了阮老师关于Docker的介绍文章:Docker 入门教程,看完后,当即决定要基于Docker来搭建这个前端CI/CD研究环境。

我最开始的思路是:在一台Linux主机上,使用Docker搭建git服务器Gitlab和持续集成软件Jenkins。这样当代码Push到Gitlab时,通知Jenkins,然后Jenkins开始自动编译和自动发布。目前这个流程基本可以走通了,当然过程中遇到了很多问题,现在把这些问题梳理记录一下,一来做下备忘,二来也希望能让一些朋友少走弯路。

1. Docker安装与升级

我使用的是 centerOS 7 系统。这里要注意的是 centerOS 6 装不了Docker

1.1 检查是否安装 Docker

docker version #查看安装的docker版本,有信息显示则已经安装docker
cat /etc/redhat-release #查看centerOS 版本

1.2 安装 Docker

如果没有安装 Docker,且centerOS版本是7及以上,可以使用下面命令安装

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #添加源
yum install -y docker-ce #执行安装
systemctl start docker #启动docker
docker run hello-world #验证docker是否正确安装

1.3 升级 Docker

一些虚拟主机可能已经安装了 Docker,如果你想使用最新版本的 Docker,就需要升级

yum list installed | grep docker #查看安装的docker
yum remove dockerxxx # 删除上面命令列出的所有docker相关软件

卸载完后,再执行上面的安装步骤即可

2. Docker 常用命令

2.1 查看信息

docker version
docker info

2.2 image文件相关

docker pull debian:tag # 带tag下载image
docker image ls   # 查看本机所有images
docker image build -t imageName:tag . #使用当前路径的Dockerfile生成 docker image

2.3 容器相关

docker container ls # 查看运行中的容器
docker container ls -a # 查看所有容器
docker container start [containerID] # 运行容器
docker container run image # 新建容器并运行
docker container kill [containID] # 停止容器
docker exec -it [containerID] /bin/bash #进入正在运行容器的bash
docker exec -it --user root [containerID] bash #以root身份进入bash。一些命令只有 root 能做,比较修改 hosts

2. 使用Docker安装Gitlab

这里先说明一下,要了解基本的 docker 使用,可以看阮老师的文章。我们可以在Docker的镜像仓库通过关键词来搜索我们需要的镜像,建议使用带有"official",即官方镜像。

docker镜像仓库

2.1 使用docker gitlab/gitlab-ce:rc 搭建

docker image pull gitlab/gitlab-ce:rc

2.2 启动gitLab容器

docker run --detach \
    --hostname www.gitlab.com \
    --publish 443:443 --publish 80:80 --publish 222:222 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:rc

启动后,就可以通过IP的方式访问Gitlab服务。配合hosts就可以使用域名访问

gitlab

3. 使用Docker安装Jenkins

3.1 安装

docker pull jenkins/jenkins:lts  #安装jenkins
docker run --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts  #启动jenkins

看到下面的界面,就可以通过浏览器地址访问到jenkins并在浏览器中安装jenkins了。

jenkins安装服务

3.2 Jenkins相关问题

3.2.1 jenkins如何拉取gitlab容器中的repo

通俗点,就是在jenkins容器中如何从gitlab容器中拉取git仓库。

一:在jenkins中生成ssh-key

ssh-keygen -t rsa #生成key
cat /var/jenkins_home/.ssh/id_rsa.pub #查看key。

二:把上面生成的ssh-key配置到gitlab中

配置ssh-key

三:在gitkens容器中配置gitlab容器的hosts,或直接使用ip拉取

docker container ls #相看容器id
docker exec -it --user root 8c4378d7c9a3 bash  #使用root用户进入jenkins容器
vi /etc/hosts #编辑查看host,可以用这几步预先进入gitlab容器查看其ip

如果 vi 命令不可用,则要使用 root 先安装 vim

docker exec -it --user root 8c4378d7c9a3 bash
apt-get update
apt-get install vim

hosts配置好后,在jenkins任务配置中加上相应的权限校验

jenkins权限

3.2.2 Jenkins 自动任务

利用 Build periodically(周期性进行项目构建) 和 Poll SCM(定时检查源码变更构建) 可以在jenkins中开始自动任务。当然Poll SCM需要事先在gitlab中配置好通知

gitlab通知

jenkins自动任务

4. 使用Docker-pm2部署ES6版本的node应用

阮老师的文章中有一个使用 docker 部署 简单 node 应用例子。但如果我们要基于 pm2 来部署我们的应用呢,而且这个 Node 应用还使用了ES6的语法。不多说,直接上结果:

FROM node:carbon
COPY . /app
WORKDIR /app
RUN npm install pm2 -g
RUN npm install babel-cli -g
RUN npm install
EXPOSE 8033
CMD ["pm2-runtime", "--interpreter", "babel-node", "./app.js"]

5. 小结

本文是我自己在基于Docker搭建gitlab和jenkins的前端CI/CD环境的操作步骤和遇到的一些问题及解决办法,希望对大家有些许帮助!

留言列表
  • sdfsafs:
    asdfsdf
      2018年11月15日 12:00 回复
    • 111:
      11111
        2018年08月09日 13:38 回复
      • tommyhu:
        整理的很到位,学习了
          2018年04月27日 15:16 回复

        发表评论: