为了实现项目的统一管理,摆脱过旧的管理条件,实现一体化持续集成的管理,以及代码review工作
系统环境
- Ubuntu Server 14.04 LTS
- GitLab CE Omnibus package
相关资源
- Gitlab
由于国内墙的原因,不能直接通过上面方法下载安装,只能通过先下载deb包,再安装
- select and download the package manually
- 选择对应的安装包(我们是ubuntu lts 故选择ubuntu/trusty 的deb包即可,下载是个漫长的过程)
- gitlab-ci-multi-runner
自动化构建工具
环境配置
安装
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
2Username: 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
7before_script:
- export ANDROID_HOME="/home/android/work/android-sdk-linux"
dev:
script:
- chmod 777 ./gradlew
- ./gradlew clean assembleRelease --stacktrace --debug
修改仓库位置(可以不修改)
- 步骤
1
2mkdir -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
4git 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
2cd ~/.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 使用
初始化代码仓库(repository)(在代码文件夹中)
1
2
3
4
5git 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
- 命令
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
5sudo 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 zhaoruyangPush
先添加.gitignore文件,删除多余文件,然后
git commit -m "init" git add .