公司原先搭了一个代码Review的服务器,由于历史原因,装的是一个32bit的Ubuntu系统,后来由于需要,需要安装gitlab,由于gitlab需要64位系统,所以临时凑合了个vagrant,本质就是一个纯粹的虚拟机,感觉不爽,这两天终于抽出时间来重新整理了一下。基于Ubuntu 18.04 x64版本和Docker来部署,减少后面换机器换系统可能导致的重复安装工作。

Docker安装

Docker安装还是比较简单的。

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88 # should have something output, key 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker $USER # 执行完重新登录,后面就可以不用sudo执行docker命令了。

gitlab转移

gitlab转移还是比较方便的,gitlab本身就提供各个版本的docker镜像,gitlab转移必须要在同一个版本之间,下载该版本对应的docker镜像,以daemon方式运行:

$ docker run --detach --publish 192.168.30.102:443:443 --publish 192.168.30.102:80:80 --publish 8222:22 --restart always --volume /home/gitlab/config:/etc/gitlab --volume /home/gitlab/logs:/var/log/gitlab --volume /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:9.5.4-ce.0

按照Backing up and restoring GitLab指导,对于Omnibus Package方式的安装,只要在源机器端执行:

$ sudo gitlab-rake gitlab:backup:create

在/var/opt/gitlab/backups/下找到备份文件,复制到目标机器的/home/gitlab/data/backups/下。注意:这个步骤同时复制源机器的“/etc/gitlab/gitlab-secrets.json”到目标机器对应目录“/home/gitlab/config”下

进入docker机器,执行恢复:

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=ts_yyyy_mm_dd_ver
gitlab-ctl status
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

提示一切成功。如果“gitlab-secrets.json”在执行gitlab:backup:restore前没有复制到目标机,恢复的时候可能会提示出错。 ts_yyyy_mm_dd_ver是指gitlab生成的备份文件,文件名最后的“_gitlab_backup.tar”不需要输入。访问“http://192.168.30.102”,一切如旧,数据转移成功。

Phabricator转移

由于这个有一定的特殊要求,比较合适的“fauria/lamp”映像,php是7.0的,不符合phabricator的要求,所以基于“fauria/lamp”的Dockerfile和“ubuntu 18.04”镜像,自己build了一个,Dockerfile如下:

FROM ubuntu:18.04
MAINTAINER zhuhongbing<hongbingzhu@gmail.com>
LABEL Description="My own LAMP stack, based on Ubuntu 18.04 LTS. Based on fauria/docker-lamp." \
License="Apache License 2.0" \
Usage="docker run -d ..." \
Version="1.0" RUN apt-get update
RUN apt-get upgrade -y ENV DEBIAN_FRONTEND noninteractive
ENV ALLOW_OVERRIDE All
ENV DATE_TIMEZONE UTC
ENV TERM xterm RUN apt-get install mysql-server php apache2 libapache2-mod-php -y
RUN apt-get install php-mysql php-gd php-curl php-apcu php-cli php-json php-mbstring -y
RUN apt-get install git vim curl ftp -y
RUN apt-get install python-pygments subversion -y COPY index.php /var/www/html/
COPY run-lamp.sh /usr/sbin/ RUN a2enmod rewrite
RUN chmod +x /usr/sbin/run-lamp.sh
RUN chown -R www-data:www-data /var/www/html VOLUME /mnt/host EXPOSE 80
EXPOSE 443 CMD ["/usr/sbin/run-lamp.sh"]

这里需要注意的是ENV命令,这个会影响build的过程和最终映像运行的。里面的TERM原先是“dumb”,这个会导致vim界面异常,如果基于Ubuntu,测试设置为xterm是比较好的。也是服务器版ubuntu的缺省设置。

Phabricator要求的组件在定制版docker里面基本都就绪了,所以后面基本上在运行的容器中执行数据恢复就行了。

phabricator/ $ ./bin/storage dump | gzip > backup.sql.gz # 源机器
$ gunzip -c backup.sql.gz | mysql # 目标机器

同时注意恢复文件“phabricator/conf/local/local.json”。 注意:phabricator的190418版本,似乎恢复完毕以后,需要先开一下phd,才能正常访问,比较坑。折腾了好久。以前版本的phabricator邮件很好配置,更新版本之后,邮件始终折腾不成功了,比较坑,谁有经验告诉我一下。配置如下:

  "metamta.default-address": "phabricator@byhx-china.com",
"cluster.mailers": [
{
"key": "smtp-mailer",
"type": "smtp",
"options": {
"host": "mail.my-company.com",
"port": 25,
"user": "phabricator@my-company.com",
"password": "my-account-pwd",
"message-id": false
}
}
],

编译服务器

编译服务器主要用于从代码服务器抓取代码版本并编译,主要是做交叉编译,比较坑的是“/etc/hosts”文件,这个文件运行的时候会自动重新生成,见 /etc/hosts file of a docker container gets overwritten里面指向的discussion Allow customization of /etc/hosts, /etc/resolv.conf, etc. in containers #2267。简而言之,就是需要在运行docker的时候增加参数“–add-host=”<name_host>:<ip_host>"”来解决。

部署代码review和CI的更多相关文章

  1. Gerrit代码Review实战

    代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...

  2. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  3. 在linux服务器上装svn版本管理,自动部署代码到项目

    在linux服务器上装svn版本管理,自动部署代码到项目 http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw ...

  4. 使用git代替FTP部署代码到服务器的例子

    这篇文章主要介绍了使用git代替FTP部署代码到服务器的例子,这种方法可以节省流量.节省时间,需要的朋友可以参考下 本地开发完成后,通常会在服务器上部署,有人会使用ftp,有人会使用scp, ftp和 ...

  5. git一键部署代码到远程服务器(linux)(采坑总结)

    原来一直使用FileZilla来代码部署,去年使用git,代码版本管理,真TM好用,一起回顾下历程! 一. 代码部署方式及思路: 1. 使用FTP/SFTP工具,上传代码 2. git人工部署.1. ...

  6. 关于Jenkins部署代码权限三种方案

    关于Jenkins部署代码权限三种方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改Jenkins进程用户为root [root@jenkins ~]# cat /etc ...

  7. 前端代码质量保障之代码review

    经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ...

  8. 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

    转载:https://www.abcdocker.com/abcdocker/2065 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkin ...

  9. Git github webhook 自动更新/部署代码 php自动更新脚本

    这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...

随机推荐

  1. Koa,React和socket.io

    安装  socket.io/socket.io-client 基本用法 首先koa和socket.io代码片段 const server = require('http'). const server ...

  2. vue-cli 发布部署IIS

    有些时候我们的服务器不用的是node,也许是IIS,这样就需要把工程构建出来,与IIS集成. 构建的命令如下 cnpm run build 将其中的dist文件夹拷贝出来,放到IIS的发布目录,在浏览 ...

  3. gp工具的许可

    还是要在代码里许可 static class Program { [STAThread] static void Main() { ESRI.ArcGIS.RuntimeManager.Bind(ES ...

  4. json jmespath的使用

    在接口测试的过程中,我们经常会接触到json格式respones,我们会经常去做取JSON中某个值的操作,可以用jmespath分析.转换和选择性的提取JSON数据进行操作,功能非常强大,易读. 一. ...

  5. ssm注入失败

    今天做ssm整合时候,创建bean/注入一直出错,检查几遍没发现问题,后来发现犯了个低级错误,mapper.xml的<mapper namespace="XXXXX" > ...

  6. 深入理解Java虚拟机读书笔记5----虚拟机字节码执行引擎

    五 虚拟机字节码执行引擎   1 运行时栈帧结构     ---栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素.     ---栈帧中存储了方法的局部变 ...

  7. python大法好——飞机大战

    import pygame from pygame.locals import * import time def key_control(hero_temp): # 获取事件,比如按键等 for e ...

  8. Java初学者应该注意的学习问题

    作为初学者,在刚开始学习的时候,一定会走很多弯路.但其实很多弯路是不必走的,会浪费很多时间,导致学习效率大打折扣.今天小编给大家讲述一下,作为一个Java初学者,在开始学习的时候应该注意的问题,应该从 ...

  9. 使用memcached遇到的一些问题

    1 .多台服务器时间不统一,引发缓存存取异常. 问题描述: 同一台memcache缓存服务器,比如memcache.server=192.168.88.51:11211   提供缓存服务: 项目部署到 ...

  10. React-Native: bios打开VT-x选项

    问题: 我在Android Studio新建一个虚拟机的时候出现如图错误: 解决方案:重启电脑,开机的时候不停的按f12(不同的主机不一样),进入bios,然后打开Virtualization Tec ...