转载

DevOps:GitLab+Jenkins+Docker实践分享

相信很多小团队仍然在使用SVN+手动发版的这样的方法,当代码量不断膨胀、开发人员不断上升,在管理上会愈发吃力。最近,领导说,小杨啊,我们要提升开发效率。于是,选择了Gitlab+Jenkins的主流工具,过程中遇到很多坑,希望和大家分享。

DevOps:GitLab+Jenkins+Docker实践分享
持续集成示意图

GitLab

GitLab简单的说就是自建版的Github,可以安装到自己的服务器上,主要功能代码管理、权限管理、代码可视化、需求管理。

Server: Ubuntu 14.04

GitLab:10.0.1

安装配置

  1. GitLab安装依赖包
sudo apt-get install curl openssh-server ca-certificates postfix
复制代码
  1. 首先信任 GitLab 的 GPG 公钥:
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
复制代码
  1. 修改或新建 /etc/apt/sources.list.d/gitlab-ce.list 加入清华的gitlab源,因为官方源实在是太慢了
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main
复制代码
  1. 安装 gitlab-ce:
sudo apt-get update
sudo apt-get install gitlab-ce
复制代码
  1. 安装完成后,修改 /etc/gitlab/gitlab.rb 文件(有的文章说改别的地方,不推荐,Ubuntu 14.04改这里就行),将gitlab.example.com换为当前服务器的ip,例如192.168.1.1。
external_url 'http://gitlab.example.com'
复制代码
  1. 接着就重新配置gitlab,然后重启GitLab服务:
sudo gitlab-ctl reconfigure#重新配置
sudo gitlab-ctl restart#重新启动gitlab服务
复制代码
  • 服务重启完成后,在浏览器中输入服务器ip,不用加端口号,即可进入GitLab的界面,GitLab和Github功能大致一致。至于不会git操作的用户,请移步Git简明教程

报错处理

  • 在浏览器输入地址后,出现502:重新配置然后重启,一般来说gitlab启动需要一段时间,稍等即可。
  • 在浏览器输入地址后,出现nginx、apache2或者别的:关闭相关服务,后重启gitlab。

Docker

Docker: 17.0

Docker的安装方法便不再赘述,官方教程很详细,简单明了。

Docker官方安装教程:Ubuntu CentOS Docker-Compose

顺便再推荐Docker官方教程,以及Docker官方镜像仓库几乎所有工具的镜像在这里都可以找到。不出几年,我们将抛开所有繁杂的安装过程,拥抱docker镜像。

重点说一下的几个配置,在网上有很多教程、回答,在17版本中都已经失效。总体来说,目前版本(17.0.x)的docker的设置都配置化,不用再在docker的执行脚本中修改。

访问远程Docker

被访问服务器中修改 /etc/default/docker 文件添加:0.0.0.0代表任何ip都可以访问,当然需要限制访问ip可以在这里设置。

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
复制代码

私有仓库

私有仓库是很有用的功能,简单几条命令即可创建私有仓库,同时,将自己的镜像上传到私有仓库,既保障的镜像安全,也为镜像备份。

docker pull registry
docker run -d -p 5000:5000 registry
复制代码

私有仓库开启后,push或者pull的时候会报链接错误。此时需要修改 /etc/docker/daemon.json 文件即可,如下:

{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries":["x.x.x.x:5000"]
}
复制代码

在Stackoverflow上很多回答说修改 /etc/init.d/docker/etc/sysconfig/docker 抑或其他,在当前版本都是行不通。

Docker代理

某些地方的服务器不能连外网,此时需要代理。创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
复制代码

若果需要https代理创建https-proxy.conf文件并做相应修改即可。接着重新载入Docker配置,重启服务,代理生效。

systemctl daemon-reload
复制代码

Jenkins

Server: CentOS 7.2

Jenkins:2.7.9

安装

  1. 首先添加yum源,然后使用yum安装,Jenkins本质上是一个war包,一定要注意在此之前需要安装Java。
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/RedHat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
复制代码
  1. 接下来配置 /etc/sysconfig/jenkins 文件,最重要的两条,一条是当前机器Java的路径;以及Jenkins的端口号,默认为8080,如果已被占用可以更换。
JENKINS_JAVA_CMD="/usr/local/java/jdk1.8/bin/java"
JENKINS_PORT="8080"
复制代码

Jenkins服务重启

sudo service jenkins start/stop/restart
sudo chkconfig jenkins on
复制代码
  1. 之后便可以在浏览器输入服务器ip:8080,看到Jenkins的页面。按照提示 /var/lib/jenkins/secrets/initalAdminPassword 文件中找到管理员密码,然后一路next即可,进入Jenkins界面。

配置

  1. 系统管理->Global Tool Configuration分别设置JDK、Git、Maven、Docker,其中name都是随便填的,路径填入相应软件的路径,值得注意的是有的只需要精确到所在文件,有的则需要精确到执行文件。当然,如果填的不对,会有黄字或红字提示。

  2. 系统管理->系统设置 中需要配置Maven项目配置和Docker Builder(需要装插件)。

Maven中Local Maven Repository选择default即可,但是在Maven软件中,需要修改maven(你的maven路径)/conf/setting.xml中的修改 local repository 标签,例如以下地址。因为权限问题,如果把本地仓库放入root目录下,会报错。

<localRepository>/var/.m2/repository</localRepository>
复制代码

Docker Builder设置。首先安装Docker Builder插件,设置Docker URL为以下二选一。本地docker可以选择以下两种的任意一种。

unix:///var/run/docker.sock#连接本地docker
tcp://xxx.x.xx.xx:2375#连接远程docker
复制代码

点Test Connection验证链接是否正确。连接远程出错请参看本文“访问远程Docker”这一小节,本地出现错误请修改Jenkins所在服务器中 /var/run/docker.sock 权限,最简单粗暴的是 chmod 777 /var/run/docker.sock

控制Docker

控制Docker流程可以用脚本,也可以用Execute Docker Command插件,在设置好Docker Builder后,很容易设置Execute Docker Command,下面用脚本演示。

docker stop $(docker ps -aq --filter='name=yang' | paste -sd "|" -) #停止名为yang的容器
docker rm $(docker ps -aq --filter='name=yang' | paste -sd "|" -) #删除名为yang的容器
docker build -t oppdocker:$BUILD_NUMBER .  #创建相应镜像,注意后面有个.
docker create --name yang-p 4000:8080 yangdocker:$BUILD_NUMBER #创建容器
docker tag yangdocker:$BUILD_NUMBER 10.0.210.148:5000/yangdocker:$BUILD_NUMBER #标记容器
docker push 10.0.210.148:5000/yangdocker:$BUILD_NUMBER #标记容器到远程仓库
docker start yang #启动容器
复制代码
原文  https://juejin.im/post/5d84a836f265da03dd3dad70
正文到此结束
Loading...