文章目录
主要内容
- 使用Docker安装gitlab
- 使用Docker安装Jenkins
- 使用Docker安装sonar代码质量管理平台
- 使用Docker安装Nexus私服
- 使用Jenkins实现一个简单的持续集成操作
最终实现,java代码使用nexus作为maven仓库,代码提交到gitlab中,使用sonar进行代码检查,触发自动构建,并将构建结果部署到指定服务器
gitlab
什么是gitlab
gitlab是一套基于git的软件版本管理工具,可以类比于码云、github等。
一般在公司内部,会使用gitlab搭建一套属于自己的代码仓库,不管是码云还是github,虽然也提供私有仓库,但毕竟代码托管在别人的服务器上,对于一些敏感信息还是有点不放心
使用docker进行安装
#!/bin/bash
HOST_NAME=gitlab.zln.com
# 填写宿主机挂载目录
GITLAB_DIR=/home/sherry/volumns/gitlab
docker stop gitlab
docker rm gitlab
docker run -d --hostname ${HOST_NAME} -p 8443:443 -p 8080:80 \
-p 2222:22 --name gitlab \
--privileged=true \
-v ${GITLAB_DIR}/config:/etc/gitlab -v \
${GITLAB_DIR}/logs:/var/log/gitlab -v \
${GITLAB_DIR}/data:/var/opt/gitlab \
registry.cn-hangzhou.aliyuncs.com/sherry/gitlab-ce:latest
registry.cn-hangzhou.aliyuncs.com/sherry/gitlab-ce:latest
是我的一个公共镜像,托管在阿里云上,省得翻墙下载麻烦
执行此脚本后,就会自动下载镜像并运行,待容器启动后,在浏览器输入
http://gitlab.zln.com:8080
,跳出以下页面
说明gitlab安装成功
基本使用
项目组与项目的创建
在注册好用户后,我们登陆进来,看到下面的页面
我们可以直接创建项目,但是一般我习惯先创建项目组,把一堆项目放在一组中,方便管理。
进入项目组后,我们创建项目
创建成功后,此时仓库是空的,由于一开始我设置的是私有仓库,所以直接clone是不行的,我们先把计算机的公钥配置给gitlab
然后就可以git clone ssh://git@gitlab.zln.com:2222/tmp/test1.git
下载项目了
剩下的使用,就和其他git仓库基本上一样了,有兴趣的同学可以去了解一下git相关的知识
邮件服务的配置
当发生特定事件的时候,如合并请求,账号修改,我们希望能够通知到特定的人。这个时候可以使用邮件的形式进行通知
- 开启SMTP服务
根据不同的邮箱服务商,我们去不同的站点开通SMTP服务
如:126
QQ
QQ邮箱在使用第三方客户端登陆的时候,需要授权码登陆
- vim /etc/gitlab/gitlab.rb
进入gitlab容器,docker exec -it gitlab bash
,修改gitlab.rb文件
# 以下为阿里云企业邮箱的配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "QQ邮箱"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'QQ邮箱'
user['git_user_email']="QQ邮箱"
重启:gitlab-ctl reconfigure
- 测试
gitlab-rails console (会有点慢,要等等)
Notify.test_email(‘收件邮箱’,‘this is title’,‘hello’).deliver_now
如果在我们的收件邮箱中收到了邮件,就说明设置成功
nexus
什么是nexus
私有仓库
使用docker进行安装
docker pull registry.cn-hangzhou.aliyuncs.com/sherry/nexus:3.13.0
- 运行
docker run -d -p 8082:8081 --name nexus -v /Users/zhangliuning/Volumes/nexus:/nexus-data registry.cn-hangzhou.aliyuncs.com/sherry/nexus:3.13.0
这里需要给docker分配2G以上的内存。否则启动过程中会失败的
默认登陆名密码:admin/admin123
这里挂载了本地目录,在Linux环境下有可能出现一下面的错误
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory
Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning: Forcing option -XX:LogFile=/tmp/jvm.log
Unable to update instance pid: Unable to create directory /nexus-data/instances
/nexus-data/log/karaf.log (No such file or directory)
Unable to update instance pid: Unable to create directory /nexus-data/instances
在nexus3官方docker仓库说明文档里挂载目录设置的权限为200但实际安装的时候无法启动,权限不够
修改为757后正常启动
或者不挂载本地目录,就不会有错了
另外一种推荐做法是
docker volume create --name nexus-data
docker run -d -p 8082:8081 --name nexus -v nexus-data:/nexus-data registry.cn-hangzhou.aliyuncs.com/sherry/nexus:3.13.0
使用容器挂载数据比较不容易出现文件权限的问题
基本使用
我们只需要关注这几个maven仓库即可,下面的几个是.net仓库
- 仓库类型
即Type
项,
proxy-代理仓库,用于代理远程仓库
group-仓库组,把其他多个仓库组成一个仓库组
通过引用仓库组,我们只需要在pom中引入一个地址,就好像引入了多个仓库地址一样
hosted-宿主
group和hosted一般是我们内部的jar
- 仓库查找顺序
本地-->私服-->远程仓库
- 新建仓库
我们可以在两个地方配置使用的仓库
1、setting.xml(公共)
......
<server>
<id>私服id</id>
<username>私服登陆用户名</username>
<password>私服登陆密码</password>
</server>
<server>
<id>私服id</id