首先准备好一台服务器,需要联网,我这里用的VMware搞的个centos7,因为要搭建gitlab,内存给的6g,小于4g时gitlab启动起来容易报错502。安装好虚拟机后固定虚拟机ip参考https://blog.csdn.net/mingiao/article/details/136537881
一、安装yum
1.1 安装yum工具
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken
二、安装docker
2.1 如果之前安装过docker的,先卸载之前的docker。
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
2.2 设置docker镜像源
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
2.3 安装docker社区版,docker-ee是企业版,收费的
yum install -y docker-ce
2.3 安装docker-compose,需要等一会
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
2.4 启停docker
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl enable docker # 将docker设置为开机自启动
三、docker搭建gitlab
3.1 下载gitlab社区版镜像,最新版的,有点大,要等会
docker pull gitlab/gitlab-ce:latest
3.2 建立docker容器中gitlab数据持久化目录
# 创建一个用于存放gitlab数据的目录 mkdir -p /opt/gitlab/{config,logs,data}
3.3 启动gitlab
docker run -d --name gitlab --restart=always --privileged=true \
-p 443:443 -p 6001:6001 -p 2222:22 \
-v /opt/gitlab/config:/etc/gitlab \
-v /opt/gitlab/logs:/var/log/gitlab \
-v /opt/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
(-v /mnt/gitlab/config:/etc/gitlab说明:冒号前面的路径表示是容器外的,上面的端口也是如此)
#启动完之后还需要修改一下配置才可以访问
vim /mnt/gitlab/config/gitlab.rb
在gitlab.rb文件中添加
# git clone地址,不加端口号默认为80
external_url 'http://192.168.88.139:6001'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.88.139'
# 此端口是run时22端口映射的2222端口
gitlab_rails['gitlab_shell_ssh_port'] = 2222
#重启gitlab
docker restart gitlab
#ip需要换成自己对应的
访问http://192.168.88.139:6001进入gitlab登录界面,报502时多刷新几遍,还不行就将虚拟机内存给大些,大于4g
#进入容器查看初始root密码
docker exec -it gitlab /bin/bash
cat /etc/gitlab/initial_root_password
密码文件会在首次执行reconfigure24小时被删除,第一次登录gitlab后就可以把密码改了,如果忘记改了,一天后登录不了就百度其他方法来重置root密码,参考https://blog.csdn.net/HYZX_9987/article/details/119929043
3.4 gitlab设置中文
3.4.1 点击头像选择preferences
3.4.2 点进去找到language,选择中文后点击下面save change,刷新即可
3.5 报错记录
3.5.1 端口占用问题,我的虚拟机上22端口已经被占用了,报了下面的错误
修改一下映射的端口就好了
3.5.2 如果出现docker网络连接问题,参考https://blog.csdn.net/GoCloudNative/article/details/135613826
3.6 补充
如果习惯使用ssh拉取代码,git生成秘钥命令 ssh-keygen -t rsa -C "gitLab注册时的邮箱",邮箱改成自己的然后一直enter就行,会在C盘下生成私钥和公钥文件,将公钥拷贝到gitlab中就好了。git秘钥生成详情参考https://blog.csdn.net/hhhlizhao/article/details/128891635。
四、搭建gitlab-runner
4.1 下载gitlab-runner镜像
docker pull gitlab/gitlab-runner
4.2 启动容器
启动之前还是要先创建容器外部的挂在路径
docker run -d --privileged=true --name runner1 --restart always
-v /otp/gitlab-runner/config:/etc/gitlab-runner
-v /opt/gitlab-runner/run/docker.sock:/var/run/docker.sock
-v /opt/gitlab-runner/bin/docker:/usr/bin/docker gitlab/gitlab-runner
4.3在gitlab中创建runner实例
我这里值设置了一个标签,其他的什么都没动
4.4 在gitlab-runner中注册
# docker exec -it是docker进入容器的命令,这里的runner是上面docker启动容器时的名字,然后使用bash进入 docker exec -it runner bash # 注册gitlab-runner,输入命令开始注册 gitlab-runner register # 按照下图将信息补充完整即可,这样gitlab-runner就注册完成了
注册完返回gitlab页面呢查看runner状态
4.5 在项目根目录下新建.gitlab-ci.yml文件
stages: - test sast: # 名字可以自定义 stage: test # 从stages中选择 tags: # 标签需要gitlab中标签名 - test-runner script: # 执行的脚本,可以是sh,except等等 - echo "Test .gitlab-ci.yml!"
4.6 gitlab-runner中命令
1、gitlab-runner run(运行一个runner服务)
2、gitlab-runner register (注册一个新的runner)
3、gitlab-runner start(启动服务)
4、gitlab-runner stop(关闭服务)
5、gitlab-runner restart(重启服务)
6、gitlab-runner status(查看各个runner的状态)
7、gitlab-runner unregister(注销掉某个runner)
栗子:
#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner
#注销所有
gitlab-runner unregister --all-runners
8、gitlab-runner list(显示所有运行着的runner)
9、gitlab-runner verify(检查已注册的运行程序是否可以连接到GitLab,但它不验证GitLab Runner服务是否正在使用运行程序)
五、docker安装maven
5.1 下载maven安装包
我这里在官网(https://maven.apache.org/)下的apache-maven-3.9.6-bin.tar
5.2 解压配置
#解压到opt目录下去
sudo tar xzf apache-maven-3.9.6-bin.tar.gz -C /opt
#配置环境变量
export M2_HOME=/opt/apache-maven-3.9.6 export PATH=${M2_HOME}/bin:${PATH}
#让配置生效
source /etc/profile
#查看是否安装成功
mvn -version
centos上,环境变量配置文件是/etc/profile,可以vim /etc/profile查看
六、docker搭建nexus
6.1 下载nexus镜像
docker pull sonatype/nexus3
6.2 创建外部挂在文件
#挂载文件夹一定要放开权限,否则后面启动nexus时会无法启动
mkdir -p /opt/nexus/nexus-data && chmod 777 /opt/nexus/nexus-data
6.3 启动容器
docker run -d -m 2G --name=nexus3 --restart always -p 8081:8081 -v /opt/nexus/nexus-data:/nexus-data sonatype/nexus3
#查看启动日志
docker logs nexus3
6.4 启动完成访问,前提是放开了端口8081或者关闭了防火墙
登录admin,密码可能是123456,如果不是,就到/opt/nexus/nexus-data下找admin.password文件,里面就是admin的密码了。第一次登录进去之后会让重新设置密码
至此,nexus搭建已完成。
6.5 测试
6.5.1 修改maven的settings.xml文件
<!--l加入server配置,用于后续发布包权限验证--> <server> <id>nexus-releases</id> <username>admin</username> #账号密码就是nexus的账号密码 <password>*****</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>*****</password> </server>
==============================================================================
<!--l加入mirror配置-->
<!--中央仓库镜像已经加了的就不用加了-->
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
<mirror> <!--该镜像的唯一标识符。id用来区分不同的mirror元素。 --> <id>maven-public</id> <!--镜像名称 --> <name>maven-public</name> <!--*指的是访问任何仓库都使用我们的私服--> <mirrorOf>*</mirrorOf> <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 --> <url>http://192.168.88.139:8081/repository/maven-public/</url> </mirror>
6.5.2 修改pom文件
<!--配置私服发布地址,repository里的id需要和maven配置setting.xml里的server id名称保持一致--> <distributionManagement> <repository> <id>nexus-releases</id> <name>Releases</name> <url>http://192.168.88.139:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Snapshot</name> <url>http://192.168.88.139:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
配置完成后,可使用mvn deploy将会将公共模块发布到maven私仓。
注:如果项目版本号末尾带有 -SNAPSHOT,则会发布到snapshots快照版本仓库
如果项目版本号末尾带有 -RELEASES 或什么都不带,则会发布到releases正式版本仓
6.5.3 打包一个项目到nexus私服并引用
查看nexus上,已经有相应的jar包了
在另外一个模块引用也是能引用到
6.6 页面介绍
默认仓库说明:
maven-central:maven中央库,默认从Central Repository:拉取jar,可以改成阿里仓库
maven-releases:私库发行版jar,初次安装完后,将Deployment policy设置为Allow redeploy
maven-snapshots:私库快照(调试版本)jar
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml或项目pom.xml中使用
仓库类型:
Group:这是一个仓库聚合的概念,用户仓库地址选择Group的地址,即可访问Group中配置的,用于方便开发人员自己设定的仓库。maven-public就是一个Group类型的仓库,内部设置了多个仓库,访问顺序取决于配置顺序,3.x默认Releases,Snapshots,Central,也可以自己设置。
Hosted:私有仓库,内部项目的发布仓库,专门用来存储本地项目生成的jar文件
Snapshots:本地项目的快照仓库
Releases: 本地项目发布的正式版本
Proxy:代理类型,从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage属性的值即被代理的远程仓库的路径),如可配置阿里云maven仓库
Central:中央仓库
七 gitlab-runner 发布springboot项目
完成上面软件安装和配置之后,接下来可以实现一个简单的springboot项目发布测试了。实现修改代码后,提交至gitlab,然后自动更新发布。
7.1 启动gitlab-runner
#docker启动gitlab-runner,并将服务器中的java,maven挂载进容器(也可以在容器中安装jdk和maven)
docker run -d --name runner --restart always -p 8080:8080
-v /otp/gitlab-runner/config:/etc/gitlab-runner
-v /opt/gitlab-runner/run/docker.sock:/var/run/docker.sock
-v /opt/gitlab-runner/bin/docker:/usr/bin/docker
-v /opt/maven3.6/apache-maven-3.6.0:/home/gitlab-runner/apache-maven-3.6.0
-v /usr/local/java/java8:/home/gitlab-runner/java8
gitlab/gitlab-runner;
#进入容器,如果没有vim,先安装vim
apt-get update
apt-get install vim
进入容器,配置环境变量
vim /etc/profile
在末尾加上:
#java environment
export JAVA_HOME=/home/gitlab-runner/java8 #路径换成自己的
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#maven environment
export MAVEN_HOME=/home/gitlab-runner/apache-maven-3.6.0 #路径换成自己的
export PATH=$PATH:$MAVEN_HOME/bin
7.2 在gitlab上创建runner,在gitlab-runner中注册runner,步骤上面安装gitlab-runner中有
7.4 创建一个简单的springboot项目,就一个controller返回一直字符转,怎么在gitlab中创建项目这些就省略了。其中.gitlab-ci.yml 文件个pom文件如下
.gitlab-ci.yml
stages: - test test: # 名字可以自定义 stage: test # 从stages中选择 tags: # 标签需要gitlab中标签名 - runner script: # 执行的脚本,可以是sh,except等等 - echo "Test .gitlab-ci.yml1!" - mvn -v - mvn package
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>test-runner</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.12.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 不配版本号的话,可能出现打出的jar包运行不了 springboot的版本--> <version>2.3.12.RELEASE</version> <!-- <version>2.0.0.RELEASE</version>--> <configuration> <!--设置为true,以便把本地的system的jar也包括进来--> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> <!-- jar包名称--> <finalName>testpro</finalName> </build> </project>
7.5 编辑.gitlab-ci.yml文件,实现自动发布