DevOps:GitLab+Jenkins+Docker实践分享

Stella981
• 阅读 756

相信很多小团队仍然在使用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

  2. 首先信任 GitLab 的 GPG 公钥:

    curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

  3. 修改或新建/etc/apt/sources.list.d/gitlab-ce.list加入清华的gitlab源,因为官方源实在是太慢了

    deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main

  4. 安装 gitlab-ce:

    sudo apt-get update sudo apt-get install gitlab-ce

  5. 安装完成后,修改/etc/gitlab/gitlab.rb文件(有的文章说改别的地方,不推荐,Ubuntu 14.04改这里就行),将gitlab.example.com换为当前服务器的ip,例如192.168.1.1。

    external_url 'http://gitlab.example.com'

  6. 接着就重新配置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

  2. 接下来配置/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 #启动容器

Pepeline

Pepeline事实上Groovy脚本,先放放,稍后写

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这