Gitlab 配置与安装,操作

为了实现项目的统一管理,摆脱过旧的管理条件,实现一体化持续集成的管理,以及代码review工作

系统环境

  • Ubuntu Server 14.04 LTS
  • GitLab CE Omnibus package

相关资源

  • Gitlab

    由于国内墙的原因,不能直接通过上面方法下载安装,只能通过先下载deb包,再安装

  1. select and download the package manually
  2. 选择对应的安装包(我们是ubuntu lts 故选择ubuntu/trusty 的deb包即可,下载是个漫长的过程)

环境配置

安装

1
sudo dpkg -i ××××.deb

Gitlab 配置

  • 配置
    1
    sudo vim /etc/gitlab/gitlab.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 配置url,如果端口号改变的话,后面要加上端口号,否则认证邮件找不到网页
external_url 'http://192.168.85.96:8088'
# 配置邮箱,用于通知
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'android@baofeng.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'android@baofeng.com'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.baofeng.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "android@baofeng.com"
gitlab_rails['smtp_password'] = "××××"
gitlab_rails['smtp_domain'] = "mail.baofeng.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
# 设置服务器反向的代理,别和tomcat冲突就行,功能没有使用
unicorn['port'] = 8085
## 设置监听的端口号
nginx['listen_addresses'] = ['192.168.85.96']
nginx['listen_port'] = 8088
  • 执行下面的命令使得变更生效。

    1
    sudo gitlab-ctl reconfigure
  • 有时候你还需要重启postfix(可选)

    1
    sudo /etc/init.d/postfix restart
  • 初次安装密码

    1
    2
    Username: root
    Password: 5iveL!fe
  • 如果遇到数据库升级问题,重装的话需要删除

    • /var/opt/gitlab
    • /opt/gitlab
    • /etc/gitlab/
  • 官网配置文档

Runners 配置(Setting Up Android Builds in Gitlab CI)

  • 国外博客
  • 官网文档

  • 如果运行时,发现权限问题,可以先获取权限,脚本如下:

    1
    2
    3
    4
    5
    6
    7
    before_script:  
    - export ANDROID_HOME="/home/android/work/android-sdk-linux"

    dev:
    script:
    - chmod 777 ./gradlew
    - ./gradlew clean assembleRelease --stacktrace --debug

修改仓库位置(可以不修改)

  • 步骤
    1
    2
    mkdir -p /mnt/application/gitlab/git-data
    sudo vi /etc/gitlab/gitlab.rb
1
git_data_dir "/mnt/application/gitlab/git-data"
1
gitlab sudo gitlab-ctl reconfigure

Gitlab使用

生成SSH KEY

  • 生成

    1
    2
    3
    4
    git config --global user.name "username"
    git config --global user.email "email"
    cd ~/.ssh
    $ssh-keygen -t rsa -C "email"

不用填写密码,把id_rsa.pub里面的东西放在gitlab里

  • 测试

    1
    ssh -T git@github.com
  • 多个SSH配置

    新建文件config

    1
    2
    cd ~/.ssh
    vim config

    配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # gitlab
    #Host 192.168.85.96
    # HostName 192.168.85.96
    # PreferredAuthentications publickey
    # IdentityFile ~/.ssh/id_rsa

    # chinaos
    Host git.oschina.net
    HostName git.oschina.net
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/chinaos

管理者

  • 创建项目
    gitlab->New Project->可以选择团队,或个人(第一个空)

  • 初始化项目

  • 设置分支为受保护的分支(即除了管理员,其他人不允许提交代码)
    Projects->点击相应的项目->Settingss(左侧)->Protected branches

  • 申请与主枝合并时,一定要先本地合并,push到自己的分支里,再去申请

  • 添加项目成员
    Projects->点击相应的项目->Members(左侧)

  • 处理合并请求
    Projects->点击相应的项目->Merge Requests(左侧)

开发者

  • 第一次使用,需要上传自己的SSH
    Gitlab->Profile Settings->SSH Keys->Add an SSH Key

  • 流程
    fork代码->生成自己的库—>开发者在这个库上开发,自己的独立功能->提交自己的fork的代码库中->功能完成->申请合并到主枝

  • 申请合并代码
    Projects->点击相应的项目->Merge Requests(左侧)->New Merge
    Request->现在要提交的分支,以及目标分支

    申请合并代码之前,自己先在本地合并代码,与源库同步,解决冲突

  • fork代码,或者开启分支

    • 由于主枝代码受保护,所以使用者必须经过这两种形式开发代码,当开发者提交代码时,必须经过主枝管理员同意,以达到review效果
    • 区别:fork出来的代码位于自己的仓库,其实可以看作一个分支,只是位置不同,所有者不同
    • 如果fork出来的代码,要同步原库的代码:

      1
      git remote add upstream git@192.168.85.96:android/TextAndroid.git

      然后就可以在studio中,Git->pull->选择对应的Remote->pull 下拉下来,然后合并了,合并后需要push到自己的仓库里,然后在gitlab发起Merge Requests
      Projects->点击相应的项目->右侧Fork

  • 分支间切换
    studio->Git->branches->选择想要的分支-> checkout

测试人员

Projects->点击相应的项目->Issues(左侧)->New Issuse

关于Review

  • 需要经过两个人相互review
  • 经常更新远端代码
  • 立项时指定review对象、
  • android规范,注释等情况
  • review的人需要明确表示可以通过的情况
  • bug必须提交到truck上,验证后才能标记解决

Git 使用

  1. 初始化代码仓库(repository)(在代码文件夹中)

    1
    2
    3
    4
    5
    git init  
    git add .
    git commit -m "评论"
    git remote add origin http://git.oschina.net/yourname/helloworld.git
    git push origin master

问题

  • remote: Not Found:需要gitlab上创建空项目
  • ![rejected] master -> master (fetch first) :-> git fetch
  • ![rejected] master -> master (non-fast-forward) : ->git pull origin master
  1. 命令
  • clone

    从现有 Git 仓库中拷贝项目(类似 svn checkout)

  • commit

    使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到本地仓库中。

  • Fork

    克隆别人的代码库到自己的项目中,可以作为子模块的形式使用
    Fork出来的代码和原来的代码同步

  • branch

    开始一个分支

  • fetch

    取回所有分支(branch)的更新,也可以指定分支名,然后通过merge或者rebase合并

  • pull

    相当于是从远程获取最新版本并merge到本地

  • push

    由本地库推到远程库

  • merge

    合并两个分支

参考

Gitlab 日常维护

SVN转Git

使用svn2git

  • 转化

    1
    2
    3
    4
    5
    sudo apt-get install git-core git-svn ruby
    gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
    gem sources -l
    sudo gem install svn2git
    svn2git http://192.168.200.222/svn/storm_wireless/android_online/trunk/client/BaofengAndroid/ --notrunk --nobranches --notags --username zhaoruyang
  • Push

    先添加.gitignore文件,删除多余文件,然后git commit -m "init" git add .