Bitbucket是Atlassian公司提供的一个基于web的版本库托管服务,支持Mercurial和 Git 版本控制系统。
可以简单的理解为,它就是一个自建的 Git 仓库,不过可以对分支和合并操作进行控制。当然功能远不止于此。
Bitbucket能够与Atlassian的其他产品相集成,如 Jira、HipChat、Confluence和Bamboo。
本篇文章的重点也在与 Jira 的整合和使用上。从而实现 CI/CD。 主要有以下几部分:
原文链接:《旻天:Bitbucket 使用手册》 https://zhuanlan.zhihu.com/p/159071804
使用 Docker 部署可以说非常简单了,直接去 DockerHub 上搜索 atlassian/bitbucket-server
官方镜像,然后选择一个版本运行即可,这里不过多赘述。
Docker 运行命令,暴露7990接口,并持久化 $BITBUCKET_HOME
目录:
docker run -d -v /tmp/bitbucket:/var/atlassian/application-data/bitbucket -p 7990:7990 clockq/atlassian:bitbu
cket-6.5.2
如果启动失败,报错如下
docker: Error response from daemon: Mounts denied:
The path /tmp/bitbucket
说明 Docker 没有 tmp
的挂载权限,需要进入 Docker 设置配置:
之后打开浏览器,输入 http://localhost:7990/
即可看到 Bitbucket 的启动页面。
稍等一小会,bitbucket 启动完成,就会看到设置页面。
下载 MySQL 驱动,并将驱动包放到 $BITBUCKET_HOME/lib
下,放到宿主的目录中即可,并重启Docker contaienr。
> cd /tmp/bitbucket/lib
/tmp/bitbucket/lib > ll
-rw-r--r-- 1 clock wheel 983914 7 13 14:04 mysql-connector-java-5.1.38-bin.jar
drwxr-x--- 2 clock wheel 64 7 13 13:55 native
/tmp/bitbucket/lib > chmod +x mysql-connector-java-5.1.38-bin.jar
MySQL 驱动在:https://pan.baidu.com/s/1S5yTy-5LvahHjm5buIGffQ 提取码: 3fw7
我为什么没将驱动直接打入镜像呢?
因为之前我会将$BITBUCKET_HOME
挂载到宿主机上,而由于挂载策略的一些原因,可能导致容器内文件被宿主机文件覆盖(jar不见了),或者导致宿主机和容器内文件冲突,如果有人知道怎么做可以更优雅,希望可以教教我。
再次进入浏览器,可以看到初始化后可以选择 MySQL 数据库。
继续下一步: 可以选择试用版,或者使用我下面的方法破解。
如果按照上面的方式部署 Bitbucket,填写的 license code
需要去官网注册并申请试用版,不过要求开发人员最多 5 人,这个明显不够用啊。
激活方法(自己生成 license key
),需要在 bitbucket-server
加入破解包。
破解包在:https://pan.baidu.com/s/12wF2dD_zdgjMuAIJTevMFQ 提取码: r9hj
开源项目在: 不完美的艺术/atlassian-agent
所以我们需要自己基于官方镜像打包有破解包的镜像,我的 Dockerfile
如下,:
FROM atlassian/bitbucket-server:6.5.2
# 将下载的代理破解包加入容器
COPY jars/atlassian-agent.jar /opt/atlassian/
RUN chmod 777 /opt/atlassian/atlassian-agent.jar
# 设置JAVA OPTS 加载代理包
ENV JAVA_OPTS="-javaagent:/opt/atlassian/atlassian-agent.jar ${JAVA_OPTS}"
MAINTAINER ClockQ <clockq@163.com>
LABEL tag="bitbucket" version="6.5.2" description="Code Review" date="20200708"
# docker build -t clockq/atlassian:bitbucket-6.5.2 .
打包镜像。
也可直接拉取我的镜像:
> docker pull clockq/atlassian:bitbucket-6.5.2
运行新的镜像。
在到了填写 license key
的时候,进入镜像内,生成自己的 license key
。
> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3059c2065f82 clockq/atlassian:bitbucket-6.5.2 "/sbin/tini -- /entr…" 10 minutes ago Up 10 minutes 0.0.0.0:7990->7990/tcp, 7999/tcp tender_germain
> docker exec -it 3059c2065f82 /bin/bash
root@3059c2065f82:/var/atlassian/application-data/bitbucket# cd /opt/atlassian/
root@3059c2065f82:/opt/atlassian# java -jar atlassian-agent.jar -d -m test@test.com -n BAT -p bitbucket -o http://test.com -s BGED-RR8N-JX6G-ZIV1
....
Your license code(Don't copy this line!!!):
AAABSg0ODAoPeJxtUV1vgkAQfL9fcUmfUQ5bEZNL
qkAMBrARNU3fTrqWS+Agd4ep/fU9Ptomja8zu
....
将 license code
copy 并填入页面的输入框即可激活。
先下载中文包,中文包在: https://pan.baidu.com/s/19tYi9u2n5xEa0TSBpxl5EQ 提取码: wesd
使用自己填写的用户名和密码登入系统,进入设置,上传中文包,完成后刷新页面即可:
加入 Jira 导航,步骤如下:
效果如下:
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
分支就好比开启了一个虚拟环境,你的改动,包括新功能开发和 Bug 修复都不会立即作用到主分支,这也就保证了主分支的代码是最低可用的。
有关更多Git和分支使用技巧,有兴趣的朋友可以看我之前的文章 《Git 学习笔记》
随着分支概念的稳固和开发需要的与日俱增,渐渐的就产生了一个以分支为基础的源码开发模型。
按照类型主要有四类: 1. 先锋主干多稳定分支; 2. 守护主干多先锋分支; 3. 主干无分支; 4. 守护主干单分支。
详情请移步:zhangmike/源代码主干分支开发四大模式
因为我们的团队不到十人,所以在比较和取舍后,我在 Bitbucket 上选择了 守护主干单分支
模型。
有一个主分支(master),只有一个开发分支(developer)。 紧急修改在主分支上进行,正常开发在开发分支上进行,主干和分支根据需要双向同步。需要采用与主干无分支相同的配套手段,而且在主干和分支上都需要建设每日集成,甚至持续集成。
要点: 1. 禁止直接修改主分支或开发分支,只能合并修改 2. 所有的发布和tag必须在主分支上
进入项目页,创建一个新项目,然后进入项目设置。
设置人员对项目的控制权限
设置项目的分支权限,禁止主分支和开发分支的删除和非合并更改操作。
创建分支模型,代码开发使用仓库的默认分支(在仓库设置中指定分支名 developer);
代码发布只能使用仓库的主分支;
开启功能、修复和快速修复的分支风格,禁用发布分支风格。
只有主分支和开发分支需要开启分支合并审核,但其他分支也可以使用审核方式合并。
其他分支开发完成并测试通过后,可发起合并到 developer
分支的审核请求,当 developer
分支积累到一定程度,发起到 master
分支的合并审核。之后在 master
分支发布新版本。
进入新建的项目中,点击左侧的 《导入存储库》
选择 github 图表,按照提示导入即可
回到项目中,会看到之前导入的一个或多个仓库,此时就已经成功自建了 git 远程仓库,我们先对它进行一些设置。
只需修改仓库的默认开发分支,其他设置如果没有特殊要求,会直接继承工程的配置
选择左侧列表中的 《克隆》,会在提示框中给一个 git 仓库的项目地址,使用你常用的开发方式下载代码并开发即可。
其他分支开发完成并测试通过后,可发起合并到 developer
分支的审核请求,当 developer
分支积累到一定程度,发起到 master
分支的合并审核。之后在 master
分支发布新版本。
点击左侧列表中的 《创建合并请求》,选择要被合并分支和目标分支,
选择继续,填入合并标题和描述,选择审核人,选择创建即可创建合并请求,并通知你选择的审核人。
回到首页,可以看到刚刚发起的合并请求:
使用刚刚指定的审核人账号登录 Bitbucket,可在首页看到需要审核的合并请求。
点击合并请求的名称,进入审核页面。在页面可以看到分支的提交记录,文件改动情况。可以点击右上角的拒绝或通过(多人审核需要),或者可以直接点击合并,同意此次合并请求。
Bitbucket 与 Jira 整合后,可以通过 Jira 问题快速创建 Git 分支,实现快速继承和交付。操作如下:
进入某个 Jira 问题,点击右侧的创建分支
选择代码仓库和分支类型即可
主要内容就这么多,程序员们,去嗨吧!!!!
基于 Bitbucket 的 Git 仓库,可以对分支权限和合并行为进行强制措施,而且不需要在 github 上管理开发组和人员权限了,但有得必有失,自建的仓库总是担心数据丢失,所以我们可以将 master
和 developer
单独同步到 github 上。
听着很牛掰是不是,可惜是手动的,而且是客户端操作。对不起,我也没想到好办法。
步骤如下:
1. 在开发机进入一个 bitbucket 项目内
> cd workspace/test
2. 查看当前的远程仓库
workspace/test> git remote -v
origin http://bitbucket.test.com/scm/test/test.git (fetch)
origin http://bitbucket.test.com/scm/test/test.git (push)
3. 添加一个新的远程仓库,如 github
workspace/test> git remote add github git@github.com:test/test.git
4. 再次查看当前的远程仓库,可以看到多了一个远程仓库,默认会将代码推送到 origin 也就是 bitbucket 上
workspace/test> git remote -v
github git@github.com:test/test.git (fetch)
github git@github.com:test/test.git (push)
origin http://bitbucket.test.com/scm/test/test.git (fetch)
origin http://bitbucket.test.com/scm/test/test.git (push)
5. 接下来,只需在你认为需要的时候,将 master 推送到 github 上即可
workspace/test> git push -u github master
workspace/test> git push -u github developer
如果哪位大佬有更牛掰的办法,希望可以教教我。
《完结》