GitLab(代码管理平台)
什么是Git
- Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
- Git与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
如何安装Git
下载
下载地址:https://git-scm.com/downloads
Git的一般工作流程
- 克隆Git资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git的基本操作
获取与创建项目命令
git init
用git init在项目目录中创建新的Git仓库,你可以在任何时候、任何目录中这么做,完全是本地化的。
git init
git clone
使用git clone 拷贝一个Git仓库到本地,让自己能够查看该项目,或者进行修改。
git clone [url]
基本快照
git add
git add命令可将该文件添加到缓存
git add [url]
git commit
提交代码到本地仓库
git push
将本地代码合并到master
TortoiseGit简化Git操作
什么是GitLab
GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。 团队成员可以利用内置的简单
聊天程序(Wal)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
基于Docker安装GitLab
我们使用Docker来安装和运行GitLab中文版,由于新版本问题较多,这里我们使用目前相对稳定的10.5版本,docker-compose.yml 配置如下:
services:
web:
image: ' twang2218/gitlab-ce-zh:10.5'
restart: always
hostname: '192.168.75. 145'
environment:
TZ: ' Asia/ Shanghai'
GITLAB _OMNIBUS_ CONFIG:|
external_ url 'http://192. 168.75.145:8080'
gitlab_ rails['git1ab_ shell ssh_ port'] = 2222
unicorn['port'] = 8888
nginx['listen_ port'] = 8080
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- /usr/1ocal/docker/gitlab/ config:/etc/gitlab
- /usr/1ocal/docker/git1ab/ data :/var/opt/gitlab
- /usr/1oca1/docker/gitlab/1ogs:/var/1og/gitlab
安装完成后的工作
- 访问地址:http://ip:8080
- 端口8080是因为我在配置中设置的外部访问地址为8080,默认是80
GitLab的基本设置
第一次使用时需要做一些初始化设置,点击“管理区域” >>> “设置”
账户与限制设置
关闭头像功能,由于Gravatar头像为网络头像,在网络情况不理想时可能导致访问时卡顿
注册限制
由于是内部代码托管服务器,可以直接关闭注册功能,由管理员统一创建用户即可。
GitLab的账户管理
- 如果GitLab部署在内网,可以开放注册
- 如果部署在公网,就关闭注册功能,手动创建账号
GitLab创建第一个项目
点击 + 号 >>> 新建项目
输入项目名称及描述信息,设置可见等级为私有,这样别人就看不见你的项目
初始化项目
我们选择通过增加一个README的方式来初始化项目
直接提交修改即可
使用SSH的方式拉取和推送项目
生成SSH KEY
使用ssh-keygen工具生成,位置在Git安装目录下,我的是 C:\Program Files\Git\usr\bin
输入命令:
ssh-keygen -t rsa -C "your_email@wxample.com"
执行成功后的效果:
(c) 2016 Microsoft Corporation。 保留所有权利。
C:\Program Files\Git\usr\bin>ssh-keygen -t rsa -C "topsale@vip .qq. com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Lusifer/ .ssh/id_ rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Lusifer/ .ssh/id_ rsa.
Your public key has been saved in /c/Users/Lusifer/ .ssh/id_ rsa. pub.
The key fingerprint is:
SHA256 :CVesJKa5VnQNihQOTotXUAIyphsqjb7Z91q0ji2704E topsale@vip .qq. com
The key's randomart image is:
+---[RSA 2048]----+
+ ..=0=.
|。。+B.+.0.0
|t +=0+.。
|00...
|=。
|So
|oE .
|o*o+
|*B*0o
+---- [SHA256]-----+
C: \Program Files\Git\usr\bin>
Nexus(依赖管理平台:Maven私服)
什么是Nexus
Nexus是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。
2016年4月6日Nexus 3.0版本发布,相较2.x版本有了很大的改变:
- 对低层代码进行了大规模重构,提升性能,增加可扩展性以及改善用户体验。
- 升级界面,极大的简化了用户界面的操作和管理。
- 提供新的安装包,让部署更加简单。
- 增加对Docker, NeGet, npm, Bower的支持。
- 提供新的管理接口,以及增强对自动任务的管理。
基于Docker安装Nexus
我们使用Docker来安装和运行Nexus,docker-compose.yml配置如下:
version:'3.1'
services:
nexus:
restart:always
image:shifudao/nexus3
container_name:nexus
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/data:/nexus-data
登录控制台验证安装
地址:http://ip:port/
用户名:admin
密码:admin123
非常吃内存,启动较慢
Maven仓库介绍
在项目中使用Maven私服
配置认证信息
在Maven settings.xml中添加Nexus认证信息(servers节点下):
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
Snapshots与Releases的区别
- nexus-releases:用于发布Release版本
- nexus-snapshots:用于发布Snapshot版本(快照版)
Release版本与Snapshot定义如下:
Release:1.0.0/1.0.0-RELEASE
Snapshot:1.0.0-SNAPSHOT
- 在项目pom.xml中设置的版本号添加SNAPSHOT标识的都会发布为SNAPSHOT版本,没有SNAPSHOT标识的都会发布为RELEASE版本。
- SNAPSHOT版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT发布后变为1.0.0-SNAPSHOT-20180522.123456-1.jar
配置自动化部署
在pom.xml中添加如下代码:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repos itory</name>
<url>http://127 .0.0.1 :8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus- snapshots</id>
<name>Nexus Snapshot Repository</ name>
<url>http://127 .0.0.1 :8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意事项:
- ID名称必须要与settings.xml中的Servers配置的ID名称保持一致。
- 项目版本号中有SNAPSHOT标识的,会发布到Nexus Snapshots Repository,否则发布到Nexus Relaese Repository,并根据ID去匹配授权账号。
部署到仓库
mvn deploy
上传第三方JAR包
Nexus 3.0不支持页面上传,可使用maven命令:
# 如第三方JAR包: aliyun-sdk-oss-2.2.3.jar
mvn deploy:deploy-file
-DgroupId=com. aliyun.oss
-DartifactId=aliyun-sdk-oss
-Dversion=2.2.3
-Dpackaging=jar
-Dfile=D: \aliyun-sdk-oss-2.2.3.jar
-Dur1=http://127 .0.0.1:8081/repository/maven- 3rd/
-DrepositoryId=nexus-releases
注意事项:
- 建议在上传第三方JAR包时,创建单独的第三方JAR包管理仓库,便于管理与维护。 ( maven-3rd )
- DrepositoryId=nexus-releases对应的是settings.xml 中Servers配置的ID名称。 (授权)
配置代理仓库
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://127 .0.0.1:8081/ repository/ maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus Plugin Repository</name>
<url>http://127 .0.0.1:8081/ repository/ maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
Registry(镜像管理平台:Docker私服)
安装Docker Registry私服
简介
官方的Docker Hub是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要Docker Registry,它可以用来存储和管理自己的镜像。
安装
在之前的Docker私有仓库章节中已经提到过如何配置和使用容器运行私有仓库,这里我们使用docker-compose 来安装,配置如下:
version: '3.1'
services:
registry:
image: registry
restart: always
container name: registry
ports:
- 5000 : 5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry
测试
启动成功后需要测试服务端是否能够正常提供服务,有两种方式:
- 浏览器端访问
http://ip:5000/v2/
- 终端访问
crul http://ip:5000/v2/
配置Docker Registry客户端
我们的教学案例使用的是Ubuntu Server 16.04LTS版本,属于==systemd 系统,需要在/etc/docker/daemon.json ==中增加如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"ip: 5000"
]
}
注意:该文件必须符合json规范,否则Docker将不能启动。
之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
检查客户端配置是否生效
使用dcoker info命令手动检查,如果从配置中看到如下内容,说明配置成功(192.168.75.133为教学案例IP)
Insecure Registries
192.168.75.133:5000
127.0.0.0/8
测试镜像上传
我们以Nginx为例测试镜像上传功能
##拉取一个镜像
docker pull nginx
##查看全部镜像
docker images
##标记本地镜像并指向目标仓库( ip:port/image_name:tag, 该格式为标记版本号)
docker tag nginx 192.168.75.133: 5000/ nginx
##提交镜像到仓库
docker push 192.168.75.133:5000/nginx
查看全部镜像
curl -XGET http://192.168.75.133:5000/v2/_catalog
查看指定镜像
以Nginx为例,查看已提交的列表
curl -XGET http://192.168.75.133:5000/v2/nginx/tags/list
测试拉取镜像
- 先删除镜像
docker rmi nginx
docker rmi 192.168.75.133:5000/nginx
- 再拉取镜像
docker pull 192.168.75.133:5000/nginx
部署Docker Registry WebUI
私服安装成功后就可以使用docker命令行工具对registry做各种操作了。然而不太方便的地方是不能直观的查看registry中的资源情况。如果可以使用UI工具管理镜像就更好了。这里介绍两个Docker Registry WebUI工具
- docker-registry-frontend
- docker-registry-web
两个工具的功能和界面都差不多,我们以docker-registry-fontend为例讲解
docker-registry-frontend
我们使用docker-compose来安装和运行,==docker-compose.yml ==配置如下:
version: '3.1'
services:
frontend:
image: konradkleine/docker-registry-frontend:v2
ports:
- 8080 :80
volumes :
- ./certs/frontend.crt:/etc/apache2/server.crt:ro
- ./certs/frontend.key:/etc/apache2/server.key:ro
environment:
ENV_DOCKER_REGISTRY_HOST=192.168.75.133
ENV_DOCKER_REGISTRY_PORT=5000
注意:请将配置文件中的主机和端口换成自己仓库的地址
运行成功后再浏览器访问:http://192.168.75.133:5000
真正实现,一次构建,到处运行
一:上传代码到GitLab
- 修改.gitignore,把不想上传的文件的后缀添加进来。
- 先提交到本地仓库,再提交到远程仓库。
二:下载代码到Deploy虚拟机
- 修改设置,启用ssh(详情请看前面GIT那一章节)
- 安装maven并配置环境变量
- 安装数据库(配置docker-compose.yml)
- 修改代码中的数据源,并git pull到本台机器
- 用mvn clean package -Dmaven.test.skip=true 命令打包代码