一、实验环境
| 系统 | 主机名 | ip地址 | 所用软件 | 扮演角色 |
| Centos7.4 | gitlab | 192.168.100.202 | gitlab | Gitlab仓库 |
| Centos7.4 | jenkins | 192.168.100.203 | jenkins、docker、docker-compose | Jenkins |
| Centos7.4 | test | 192.168.100.204 | docker、docker-compose | 测试环境 |
| Centos7.4 | true | 192.168.100.205 | docker、docker-compose | 生产环境 |
| Centos7.4 | harbor | 192.168.100.206 | harbor、docker、docker-compose | harbor镜像仓库 |
二、实验步骤
-目的
Jenkins+gitlab配合发布docker容器项目
-思路:
- 构建gitlab仓库,创建新项目
- 构建jenkins,把密钥传给其他的主机
- 构建harbor仓库,上传mysql、php、nginx的镜像
- 在测试主机、生产主机安装docker与docker-compose
- 使用jenkins登录git复制仓库,然后把compose-lnmp传到仓库
- 在jenkins创建流水线项目,使用流水线脚本,创建脚本先拉gitlab仓库的内容,在测试环境拉取harbor仓库的镜像,然后把jenkins拉取的gitlab数据scp到测试主机,然后在测试主机执行docker-compose up -d 命令构建lnmp,要记得scp的路径要和docker-compose.yml文件中挂载的目录相同
- 在测试主机测试成功后,再次创建一个流水线项目,这次写的流水线脚本是scp到生产主机,其他不变即可
(1)搭建Gitlab仓库,创建新项目
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname gitlab [root@Centos7 ~]# su [root@gitlab ~]# systemctl stop firewalld [root@gitlab ~]# setenforce 0 setenforce: SELinux is disabled [root@gitlab ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上
******(2)安装依赖包,安装gitlab [root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python 。。。。。。 完毕! [root@gitlab ~]# systemctl enable postfix #开启邮件服务 [root@gitlab ~]# systemctl start postfix [root@gitlab ~]# ll #上传gitlab软件包 总用量 625204 -rw-------. 1 root root 1264 1月 12 2021 anaconda-ks.cfg -rw-r--r-- 1 root root 640204790 6月 29 18:41 gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@gitlab ~]# yum -y install gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm #安装gitlab-ce 。。。。。。 完毕! [root@gitlab ~]# vim /etc/gitlab/gitlab.rb 12 ##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab 13 external_url 'http://192.168.100.202' #修改为本机ip地址 14 15 ## Ro #保存退出 [root@gitlab ~]# gitlab-ctl reconfigure #修改完配置文件需要重置,等待重置完成 Running handlers: Running handlers complete Chef Client finished, 509/1343 resources updated in 02 minutes 39 seconds gitlab Reconfigured! #重置完成 [root@gitlab ~]# netstat -anpt | grep 80 #验证端口 tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2027/unicorn master tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2091/nginx: master tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 2047/sidekiq 5.2.7 tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 2091/nginx: master tcp 0 0 127.0.0.1:50362 127.0.0.1:8082 ESTABLISHED 2537/prometheus tcp 0 0 127.0.0.1:8060 127.0.0.1:49838 ESTABLISHED 2092/nginx: worker tcp 0 0 127.0.0.1:8082 127.0.0.1:50362 ESTABLISHED 2047/sidekiq 5.2.7 tcp 0 0 127.0.0.1:8080 127.0.0.1:35318 TIME_WAIT - tcp 0 0 127.0.0.1:8080 127.0.0.1:35326 TIME_WAIT - tcp 0 0 127.0.0.1:49838 127.0.0.1:8060 ESTABLISHED 2537/prometheus tcp 0 0 127.0.0.1:8080 127.0.0.1:35320 TIME_WAIT -
(3)过一两分钟后访问gitlab,直接访问80端口即可,因为gitlab默认使用nginx作为web
成功访问!!!
******(4)汉化gitlab [root@gitlab ~]# ll 总用量 699968 -rw-------. 1 root root 1264 1月 12 2021 anaconda-ks.cfg -rw-r--r-- 1 root root 76557595 6月 29 17:01 gitlab-12-0-stable-zh.tar.gz #上传汉化包 -rw-r--r-- 1 root root 640204790 6月 29 18:41 gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@gitlab ~]# tar xf gitlab-12-0-stable-zh.tar.gz [root@gitlab ~]# cat gitlab-12-0-stable-zh/VERSION #确认版本 12.0.3 [root@gitlab ~]# gitlab-ctl stop #先停止gitlab ok: down: alertmanager: 1s, normally up ok: down: gitaly: 0s, normally up ok: down: gitlab-monitor: 1s, normally up ok: down: gitlab-workhorse: 0s, normally up ok: down: grafana: 1s, normally up ok: down: logrotate: 0s, normally up ok: down: nginx: 1s, normally up ok: down: node-exporter: 0s, normally up ok: down: postgres-exporter: 0s, normally up ok: down: postgresql: 1s, normally up ok: down: prometheus: 0s, normally up ok: down: redis: 1s, normally up ok: down: redis-exporter: 0s, normally up ok: down: sidekiq: 0s, normally up ok: down: unicorn: 0s, normally up [root@gitlab ~]# unalias cp #删除cp别名 [root@gitlab ~]# cp -rf gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/ cp: 无法以目录"gitlab-12-0-stable-zh/log" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/log" #报错不用管 cp: 无法以目录"gitlab-12-0-stable-zh/tmp" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/tmp" [root@gitlab ~]# gitlab-ctl start #开启gilab ok: run: alertmanager: (pid 3470) 0s ok: run: gitaly: (pid 3478) 1s ok: run: gitlab-monitor: (pid 3498) 0s ok: run: gitlab-workhorse: (pid 3502) 1s ok: run: grafana: (pid 3510) 0s ok: run: logrotate: (pid 3523) 1s ok: run: nginx: (pid 3529) 0s ok: run: node-exporter: (pid 3534) 1s ok: run: postgres-exporter: (pid 3538) 0s ok: run: postgresql: (pid 3619) 0s ok: run: prometheus: (pid 3628) 1s ok: run: redis: (pid 3637) 0s ok: run: redis-exporter: (pid 3641) 1s ok: run: sidekiq: (pid 3646) 0s ok: run: unicorn: (pid 3652) 1s
同样过一两分钟再访问
Gitlan仓库搭建完成!!!
(5)创建一个新项目
成功创建项目!
(6)生成ssh密钥,因为是要配合jenkins,所有这里使用的密钥直接在jenkins主机上操作即可
[root@jenkins ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:e1olz2v3yPkgpuuP+C9bLRj5vDsRup46cH13uQq51y8 root@jenkins The key's randomart image is: +---[RSA 2048]----+ | | | | | | | .. | | S.+... .| | . ..oX+....| | o. +=Xo+..| | .=o*=BE* | | +*XOB==+=| +----[SHA256]-----+ [root@jenkins ~]# cat .ssh/id_rsa.pub #查看公钥,复制公钥 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClc2b0yoL8i4O2TTO+n9w0EslQ3S5ekealEeMRnYxbWIDqW+d4X3SP2HacJWlkDl7unVNegzTrrXrzy4UWU1qgDI8C+94yVqKD2zF0PMZPO8e5ORD5N7gy5CIjEupbWHA2Xg7Hl8VX1h99VZcoERk1mnAtnZtSZyFtdGbg8QsX5PzW+mvHWwvilXJpXQHXeVHlPATGcObsVM5vkKxHajbYq1LZtYRA51J2jkKeUqPohqmYZZ+re9MXhVJl7uL+NgutxN+LcwpesH7Er7hF+iUD6JVrBKW7HkmZHZZpIllAMQI7aa9nqOWGkXIKr1jTDuiQIN+akPGfUEbWd5dxyC37 root@jenkins
(2)搭建Jenkins主机,把密钥传给其他的主机,把root用户的私钥放到自己上,方便拉取gitlab仓库的数据
这里做的时候直接把插件包上传了,然后重启jenkins就可以了
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname jenkins [root@Centos7 ~]# su [root@jenkins ~]# systemctl stop firewalld [root@jenkins ~]# setenforce 0 setenforce: SELinux is disabled [root@jenkins ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上
******(2)安装JDK环境 [root@jenkins ~]# ll 总用量 177124 -rw-------. 1 root root 1264 1月 12 2021 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 6月 30 2017 jdk-8u91-linux-x64.tar.gz [root@jenkins ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/ [root@jenkins ~]# mv /usr/local/jdk1.8.0_91 /usr/local/java [root@jenkins ~]# ls /usr/local/ bin etc games include java lib lib64 libexec sbin share src [root@jenkins ~]# vim /etc/profile 。。。。。。最后一行添加 JAVA_HOME=/usr/local/java PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH #保存退出 [root@jenkins ~]# vim /etc/profile [root@jenkins ~]# source /etc/profile #使配置生效 [root@jenkins ~]# java -version #查看java版本,确认jdk环境 java version "1.8.0_91" Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
******(3)上传Jenkins软件包,安装、配置 [root@jenkins ~]# ll 总用量 241624 -rw-------. 1 root root 1264 1月 12 2021 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 6月 30 2017 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 29 17:03 jenkins-2.222.4-1.1.noarch.rpm [root@jenkins ~]# yum -y install jenkins-2.222.4-1.1.noarch.rpm 。。。。。。 完毕! [root@jenkins ~]# vim /etc/sysconfig/jenkins #修改配置文件 28 # 29 JENKINS_USER="root" #待会需要使用root传输密钥,所以这里要改一下 30 #保存退出 [root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/ #优化命令执行路径 [root@jenkins ~]# /etc/init.d/jenkins start #开启jenkins Starting jenkins (via systemctl): [ 确定 ] [root@jenkins ~]# netstat -anpt | grep 8080 #验证端口 tcp6 0 0 :::8080 :::* LISTEN 1241/java [root@jenkins ~]# chkconfig jenkins on
(4)使用浏览器访问8080端口,解锁jenkins
提前获得密码 [root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword b90fe608d1024dd5ab9dd97b4251fdb0
这里如果机器是联网的话需要先断网再点击继续,因为下一步是下载插件,如果使用jenkins官网的会下载的很慢,可以先跳过插件安装
点击跳过插件安装


















