相信很多小团队仍然在使用SVN+手动发版的这样的方法,当代码量不断膨胀、开发人员不断上升,在管理上会愈发吃力。最近,领导说,小杨啊,我们要提升开发效率。于是,选择了Gitlab+Jenkins的主流工具,过程中遇到很多坑,希望和大家分享。
GitLab
GitLab简单的说就是自建版的Github,可以安装到自己的服务器上,主要功能代码管理、权限管理、代码可视化、需求管理。
Server: Ubuntu 14.04
GitLab:10.0.1
安装配置
GitLab安装依赖包
sudo apt-get install curl openssh-server ca-certificates postfix
首先信任 GitLab 的 GPG 公钥:
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
安装 gitlab-ce:
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'
接着就重新配置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
安装
首先添加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
接下来配置
/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
- 之后便可以在浏览器输入服务器ip:8080,看到Jenkins的页面。按照提示
/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
控制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 #启动容器
Pepeline
Pepeline事实上Groovy脚本,先放放,稍后写