Jenkins+GitLab+Docker持续集成LNMP(上)

简介: Jenkins+GitLab+Docker持续集成LNMP(上)

一、实验环境


系统 主机名 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容器项目


-思路:


  1. 构建gitlab仓库,创建新项目
  2. 构建jenkins,把密钥传给其他的主机
  3. 构建harbor仓库,上传mysql、php、nginx的镜像
  4. 在测试主机、生产主机安装docker与docker-compose
  5. 使用jenkins登录git复制仓库,然后把compose-lnmp传到仓库
  6. 在jenkins创建流水线项目,使用流水线脚本,创建脚本先拉gitlab仓库的内容,在测试环境拉取harbor仓库的镜像,然后把jenkins拉取的gitlab数据scp到测试主机,然后在测试主机执行docker-compose up -d 命令构建lnmp,要记得scp的路径要和docker-compose.yml文件中挂载的目录相同
  7. 在测试主机测试成功后,再次创建一个流水线项目,这次写的流水线脚本是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

22b420309b8343d6bf84f05b9fffa690.png


817c3b720d6640f5acad1a9b5a83a102.png

848eb18a639d4c4cbcf6dd0ae6875927.png


成功访问!!!

8ea22237ebe94e4ab65a5e8bee209ed9.png

******(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

同样过一两分钟再访问

6edf0abd31d6419ca9dfc87756f0f777.png

496f2350eed747e7916a32bec3f2d7c4.png


f4d15ccec9ef4a0ab4c57ca41c900c3c.png

05ad4cd16434419a8020ff6d457f2728.png

Gitlan仓库搭建完成!!!


(5)创建一个新项目


3780e8ee44414f8c9d2f231f63e0f7c3.png

dccf705275ce4484b146483e3348b781.png


528de332a8ac437db88fe22e506e8266.png


成功创建项目!


(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

78dad076386043c295748ae4979f04b0.pngb39c767c78cc448c8117da6421cb20b7.png

(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官网的会下载的很慢,可以先跳过插件安装

bec465170fac4e8abc536767c7dac072.png


点击跳过插件安装


658273f4ef2f4e7daee5b5890ec583b2.png

a1752723456d4bbba6ec385b79d8c34b.png


5c2b043c0b684c349ec75aaabde01a53.png

964b54cf3ad344e19fe3938ba91a532c.png

2cd24ccf3cbc4e008fd05196ddbc1e61.png

目录
相关文章
|
存储 Kubernetes 监控
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
508 63
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
581 2
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
1923 9
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
694 8
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
414 12
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
443 2
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
962 4
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
717 4
|
监控 jenkins 持续交付
Docker和Jenkins有什么不同
【10月更文挑战第18天】Docker和Jenkins有什么不同