相信很多小团队仍然在使用SVN+手动发版的这样的方法,当代码量不断膨胀、开发人员不断上升,在管理上会愈发吃力。最近,领导说,小杨啊,我们要提升开发效率。于是,选择了Gitlab+Jenkins的主流工具,过程中遇到很多坑,希望和大家分享。
GitLab简单的说就是自建版的Github,可以安装到自己的服务器上,主要功能代码管理、权限管理、代码可视化、需求管理。
Server: Ubuntu 14.04
GitLab:10.0.1
sudo apt-get install curl openssh-server ca-certificates postfix 复制代码
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null 复制代码
/etc/apt/sources.list.d/gitlab-ce.list
加入清华的gitlab源,因为官方源实在是太慢了 deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main 复制代码
sudo apt-get update sudo apt-get install gitlab-ce 复制代码
/etc/gitlab/gitlab.rb
文件(有的文章说改别的地方,不推荐,Ubuntu 14.04改这里就行),将gitlab.example.com换为当前服务器的ip,例如192.168.1.1。 external_url 'http://gitlab.example.com' 复制代码
sudo gitlab-ctl reconfigure#重新配置 sudo gitlab-ctl restart#重新启动gitlab服务 复制代码
Docker: 17.0
Docker的安装方法便不再赘述,官方教程很详细,简单明了。
Docker官方安装教程:Ubuntu CentOS Docker-Compose
顺便再推荐Docker官方教程,以及Docker官方镜像仓库几乎所有工具的镜像在这里都可以找到。不出几年,我们将抛开所有繁杂的安装过程,拥抱docker镜像。
重点说一下的几个配置,在网上有很多教程、回答,在17版本中都已经失效。总体来说,目前版本(17.0.x)的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
抑或其他,在当前版本都是行不通。
某些地方的服务器不能连外网,此时需要代理。创建 /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 复制代码
Server: CentOS 7.2
Jenkins:2.7.9
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 复制代码
/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 复制代码
/var/lib/jenkins/secrets/initalAdminPassword
文件中找到管理员密码,然后一路next即可,进入Jenkins界面。 系统管理->Global Tool Configuration分别设置JDK、Git、Maven、Docker,其中name都是随便填的,路径填入相应软件的路径,值得注意的是有的只需要精确到所在文件,有的则需要精确到执行文件。当然,如果填的不对,会有黄字或红字提示。
系统管理->系统设置 中需要配置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流程可以用脚本,也可以用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 #启动容器 复制代码