序言、服务器规格=
基于CentOS7.6版本的Linux操作系统编写的流程部署
- CPU:8核或更多
- 内存:16GB或更多
- 硬盘空间:500G(可拓展)
- 网络带宽:建议使用5Mbps及以上(可以稍微再高一点)
- 系统版本:建议使用Linux的CentOS7.6版本
注:此方案不保证完全正常运行
-
安装git
1.1 新建镜像文件
添加GitLab软件包仓库。
sudo curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
安装相关依赖库和编译工具编译
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
yum -y install policycoreutils openssh-server openssh-clients postfix
1.2 安装gitlab
systemctl enable sshd && sudo systemctl start sshd
systemctl enable postfix && systemctl start postfix
2.关闭防火墙或者防火墙增加白名单
systemctl stop firewalld.service
3.下载软件
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm/download.rpm
4.开始安装(注:ip为服务器的公网IP)
sudo EXTERNAL_URL=8.141.94.237 yum install -y gitlab-ce
5.修改默认端口
cd /etc/gitlab
vi gitlab.rb
6.在文件中修改 external_url和nginx['listen_port']的key对应的内容
external_url 'http://8.141.94.237' #公网IP
nginx['listen_port'] = 80
6.重启
gitlab-ctl reconfigure
gitlab-ctl restart
7.页面输入即可访问,能访问,表示gitlab-ce安装成功了
http://本机ip
1.3 登录验证
浏览器访问(http://本机ip),默认端口80;不能访问查看防火墙是否开放80端口
初始密码在 服务目录下查看
cat /etc/gitlab/initial_root_password
设置中文
1.4 配置管理
邮件管理设置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.ntfwu.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "jira_admin@ntfwu.com"
gitlab_rails['smtp_password'] = "1LH7qBYbZsdXPren"
gitlab_rails['smtp_domain'] = "ntfwu.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
# gitlab_rails['smtp_pool'] = false
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'jira_admin@ntfwu.com'
gitlab_rails['gitlab_email_display_name'] = 'git-admin'
安装路径的修改
1.5 Git安装(必须安装-Jenkins拉取gitlab的工具)资源占用量极少
yum install git -y
检验安装是否成功
git --version
-
安装Harbor
2.1 安装docker
2.1.1、升级所有包
yum update //升级所有包,同时升级软件和系统内核
yum upgrade //升级所有包,不升级软件和系统内核
2.1.2、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.1.3、添加aliyun docker软件包源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.1.4、添加软件包源到本地缓存
yum makecache fast
rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
2.1.5、安装docker
yum -y install docker-ce
2.1.6、设置开机启动docker
systemctl enable docker
2.1.7、重启docker
systemctl restart docker
2.1.8、配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:cr.console.aliyun.com/cn-hangzhou… 也可以直接复制以下命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q9n10oke.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.1.9、安装docker-compose
直接使用 yum install docker-compose 安装即可。
如果加载 docker-compose.yml 文件出现以下错误,说明 yml 中配置的 version 不支持,修改成报错信息中支持的版本即可(以下报错中提示,只支持 version 为 2.2 或者 3.3 的版本)
[root@VM-8-17-centos redis-sentinel]# docker-compose up -d
ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
2.2 下载harbor到服务器并安装、
harbor官网地址:github.com/goharbor/ha…
下载地址:wget -c github.com/goharbor/ha…
[root@qingxi-CICD /mnt/Harbor] # tar -xf harbor-offline-installer-v2.8.1.tgz
[root@qingxi-CICD /mnt/Harbor] # ls
harbor harbor-online-installer-v2.9.0.tgz
[root@qingxi-CICD /mnt/Harbor] # cd harbor
[root@qingxi-CICD /mnt/Harbor/harbor] # ls
common.sh harbor.yml.tmpl install.sh LICENSE prepare
修改harbor.yml 文件里面的hostname 改成本机地址
[root@harbor harbor]# vim harbor.yml
hostname: 8.141.94.237
在本配置文件更改http的端口
port:5000
注释掉https
data_volume: /mnt/Harbor/harbor-data
配置http镜像仓库可信任
vim /etc/docker/daemon.json
添加
{
"registry-mirrors": ["https://q9n10oke.mirror.aliyuncs.com"],
"insecure-registries": ["8.141.94.237:5000"]
}
systemctl daemon-reload
systemctl restart docker
拉取镜像
./prepare
安装
./install.sh
当完成安装后,即可通过本机地址进行浏览器的访问,账户名为admin,密码默认为Harbor12345
配置开机自启:
docker-compose -f /mnt/Harbor/harbor/docker-compose.yml up -d
设置权限
chmod +x /etc/rc.local /etc/rc.d/rc.local
命令行登陆
[root@qingxi-CICD /mnt/Harbor/harbor] # docker login 8.141.94.237:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
docker客户端
-
jenkins安装
3.1 首先进行安装前准备,jdk1.8、maven的安装
3.1.1 jdk的安装
官网下载地址:https://www.[oracle](so.csdn.net/so/search?q…
解压包
tar -xvf jdk-8u381-linux-x64.tar.gz
改名
mv jdk1.8.0_381 jdk1.8
[root@qingxi-CICD /mnt/java] # ls
jdk1.8 jdk-8u381-linux-x64.tar.gz
node.js安装(可不安装)
检查是否安装node
node --version
若未安装
cd /mnt/java
wget https://nodejs.org/dist/v14.0.0/node-v14.0.0-linux-x64.tar.gz
解压
tar xvzf node-v14.0.0-linux-x64.tar.gz
修改名字
mv node-v14.0.0-linux-x64 node-v14.0.0
修改环境变量
vim /etc/profile
export PATH=/mnt/java/node-v14.0.0/bin:$PATH
source /etc/profile
3.1.2 maven的安装
官网下载地址:dlcdn.apache.org/maven/maven…
# 解压包
[root@qingxi-CICD /mnt/java] # ls
apache-maven-3.9.5-bin.tar.gz jdk1.8 jdk-8u381-linux-x64.tar.gz
[root@qingxi-CICD /mnt/java] # tar -zxvf apache-maven-3.9.5-bin.tar.gz
[root@qingxi-CICD /mnt/java] # ls
apache-maven-3.9.5 apache-maven-3.9.5-bin.tar.gz jdk1.8 jdk-8u381-linux-x64.tar.gz
# 改名字
[root@qingxi-CICD /mnt/java] # mv apache-maven-3.9.5 maven-3.9.5
[root@qingxi-CICD /mnt/java] # ls
apache-maven-3.9.5-bin.tar.gz jdk1.8 jdk-8u381-linux-x64.tar.gz maven-3.9.5
# 新建一个repository仓库,用于存放Maven下载下来的jar包
[root@qingxi-CICD /mnt/java] # mkdir repository
[root@qingxi-CICD /mnt/java] # cd / mnt / java / maven / conf
[root@qingxi-CICD /mnt/java] # sudo vim setting
设置Maven仓库,就是刚才新建的文件夹 < localRepository >/ mnt / java / repository </ localRepository >
配置为阿里云镜像地址
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
3.1.3 配置环境变量
[root@jenkins local]# vim /etc/profile
### 到最后一行添加以下内容 ####
JAVA_HOME=/mnt/java/jdk1.8
MAVEN_HOME=/mnt/java/maven-3.9.5
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME
刷新配置文件
source /etc/profile
# 校验是否安装成功:
[root@qingxi-CICD /mnt/java] # java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
[root@qingxi-CICD /mnt/java] # mvn -v
Apache Maven 3.9.5 (57804ffe001d7215b5e7bcb531cf83df38f93546)
Maven home: /mnt/java/maven-3.9.5
Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: /mnt/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.21.3.el7.x86_64", arch: "amd64", family: "unix"
3.2创建Jenkins挂载目录并授权
我们在服务器(宿主机)上先创建一个jenkins工作目录 /mnt/jenkins_mount 赋予相应权限。稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。
3.2.1 在宿主机创建挂载目录
# 在宿主机创建挂载目录
sudo mkdir -p /mnt/jenkins_mount
3.2.2文件夹授权
# 该文件夹授权
sudo chmod 777 /mnt/jenkins_mount
3.2.3 创建并启动Jenkins容器
拉取镜像
docker pull jenkins/jenkins:2.427
创建容器
docker run -d -p 9200:8080 -p 9201:50000 -v /mnt/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /mnt/java/jdk1.8:/usr/local/src/jdk/jdk1.8 -v /mnt/java/maven-3.9.5:/opt/apache-maven-3.9.5 -v /usr/bin/git:/usr/local/git --name jenkins jenkins/jenkins:2.427
参数说明:
-d 后台运行镜像
-p 9200:8080 将镜像的8080端口映射到宿主机的9200端口
-p 9201:50000 将镜像的50000端口映射到服务器的9201端口
-v /mnt/jenkins_mount:/var/jenkins_mount 其中/var/jenkins_home 目录为jenkins容器工作目录,我们将这个目录挂载到宿主机硬盘上的一个目录位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /mnt/jenkins_mount目录
-v /mnt/java/jdk1.8:/usr/local/src/jdk/jdk1.8 在jenkins使用构建命令重启jar包需要使用到JDK,需要挂载到服务器上真实的JDK目录。
-v /mnt/java/maven-3.9.5:/opt/apache-maven-3.9.5 挂载服务器上Maven目录
-v /usr/bin/git:/usr/local/git 将服务器中的git映射到jenkins容器中
-v /etc/localtime:/etc/localtime 设置容器时间和服务器同样的时间设置。
-name jenkins 给容器起一个别名
jenkins/jenkins:2.427 镜像名称:版本号
3.2.4 查看容器运行情况
3.2.5 Jenkins网站访问及配置
通过上面的方式我们已经安装好了Jenkins,那么接下来我们就需要访问该Jenkins并对其做相关的配置了。
说明:这里的http://8.141.94.237为我们服务器宿主机的ip地址。如果是直接在服务器中打开,那么就只需要8.141.94.237:9200即可访问。
3.3 解锁jekins
3.3.1 通过下面的截图,我们看到了Jenkins提示我们需要在红色标记的地方获取解锁密码,并将解锁密码输入到文本框中。
说明:由于我们将jenkins进行挂载到了宿主机的 /home/jenkins_mount 目录下,所以要将上面的地址进行替换。这样才能找到密码。
[root@qingxi-CICD /mnt/java] # cat /mnt/jenkins_mount/secrets/initialAdminPassword
65247a348f944e4ea534547cc5d85d04
3.3.2 安装插件
先按照建议来进行插件的安装吧
3.3.3 查看Jenkins的中文插件是否已安装
3.3.4 jenkins插件安装
先进行推荐安装、后进行可选性插件的安装
1、git plugin
2、GitLab Plugin
3、publish over ssh
4、Gitlab Authentication
5、Gitlab Hook plugin(这个可以根据自己需求,可以不用安装)
6、Git Parameter
7、Maven Integration
8、Docker
9、docker-built-step
3.3.5 安装完成后和重启Jenkins服务
必要时可以重启docker内的Jenkins容器
docker restart jenkins
3.3.6 jenkins配置
安装好上一步中的几个插件之后,接下来需要在jenkins中配置一下Git和 SSH : 点击:系统管理 -> 系统配置 -> 找到Git和SSH
-
安装nexus
4.1、寻找Nexus镜像
查找镜像
docker search sonatype/nexus3
拉取镜像
docker pull sonatype/nexus3
持久化目录
mkdir -p /mnt/nexus/data
chmod 777 -R /mnt/nexus/data
4.2、启动Nexus镜像
docker run -d --name nexus3 -p 8081:8081 --restart always -v /mnt/nexus/data:/nexus-data sonatype/nexus3
日志查看
docker logs -f nexus3
稍等一下,出现 Started Sonatype Nexus OSS 表示启动好了。
4.3、Nexus访问
安装完成后可访问管理平台:http://ip:8081,(注:阿里云服务器需要配置安全组,开放端口)
默认管理员用户名:admin 密码:admin123,如果提示密码不对,需要到容器里面查看管理员admin密码!!!
cat /mnt/nexus/data/admin.password
4.4、配置Nexus
hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
proxy:代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
group:仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
4.5、创建 Blob Stores
在创建repository之前,还需要先指定文件存储目录,便于统一管理。就需要创建Blob Stores,不创建则使用的是default
可以看到blob stores有两个,一个是系统默认的,一个是刚创建的。如果不想自己创建,使用系统默认的文件存储目录也是可以的。到时候创建repository时,存储目录选择default就可以了。新创建的目录,可以在/data/blobs/目录下面可以看到。
4.6、Nexus仓库
如图所示,代理仓库负责代理远程中央仓库,托管仓库负责本地资源,组资源库 = 代理资源库 + 托管资源库
4.7、创建proxy repository 代理仓库
选择maven2(proxy),代理仓库
设置代理仓库
推荐几个远程代理仓库
jboss的maven中央仓库地址:http://repository.jboss.com/maven2/
阿里云的maven中央仓库地址:http://maven.aliyun.com/nexus/content/groups/public/
apache的maven中央仓库地址:http://repo.maven.apache.org/maven2/
最后创建
4.8、创建hosted repository 仓库
Hosted有三种方式:Releases、Snapshot、Mixed
Releases: 一般是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
最后创建
上图的Hosted设置选项,选项中有三个值:
Allow redeploy:允许同一个版本号下重复提交代码, nexus以时间区分
Disable redeploy:不允许同一个版本号下重复提交代码
Read-Only:不允许提交任何版本
原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。
4.9、创建group repository 组仓库
为什么要注意顺序??
官方文档中建议:
It is recommended practice to place hosted repositories higher in the list than proxy repositories. For proxy repositories, the repository manager needs to check the remote repository which will incur more overhead than a hosted repository lookup.
希望将hosted repositories【托管资源库】的顺序放在proxy repositories【代理资源库】之前,因为一个group【组资源库】中可以涵括这些托管资源库和代理资源库。而一整个的group是作为一个public,一个接口给别人使用的。所以当查找架包的时候,如果代理资源库在前面,那就是先从远程去查找jar,而不是先从托管资源库(本地仓库)去查找是否有jar。这样访问外网的消耗比起来在本地查找,当然是将托管资源库放在代理资源库之前的优先位置了。
4.10、 Maven 配置
Maven下的setting.xml文件和项目中的pom.xml文件的关系是:settting.xml文件是全局设置,而pom.xml文件是局部设置。pom.xml文件对于项目来说,是优先使用的。而pom.xml文件中如果没有配置镜像地址的话,就按照settting.xml中定义的地址去查找。
<!--nexus服务器,id为组仓库name-->
<servers>
<server>
<id>maven-public</id>
<username>admin</username>
<password>qingxi123456.</password>
</server>
</servers>
<!--仓库组的url地址,id和name可以写组仓库name,mirrorOf的值设置为central-->
<mirrors>
<mirror>
<id>custom_group</id>
<name>custom_group</name>
<url>http://192.168.124.189:8081/repository/custom_group/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
修改后可以重新编译项目,必须添加参数-U,(-U,--update-snapshots,强制更新releases、snapshots类型的插件或依赖库,否则maven一天只会更新一次snapshot依赖)。代理仓库会从远程中央仓库下载jar包
mvn clean compile -U