Jenkins+Gitlab+Docker+Maven搭建CICD

最近因为公司需要,所以搭建了一套持续集成的环境。再此记录一下。如转载,请标明出处。

环境说明

虚拟机:centos7
jdk:1.8.022
maven:3.6.2
git:2.23.0
jenkins:2.201.1.1

GitLab安装

Gitlab服务器建议内存最少8G,否则会经常出现访问502的问题。

拉取Gitlab镜像
docker pull gitlab/gitlab-ce

启动GitLab

docker run --detach \
 --hostname gitlab.weizhaohui.com \
 --publish 8443:443 --publish 48080:80 --publish 8022:22 \
 --name gitlab \
 --restart always \
 --volume /opt/gitlab/config:/etc/gitlab \
 --volume /opt/gitlab/logs:/var/log/gitlab \
 --volume /opt/gitlab/data:/var/opt/gitlab \
 0e39d6e67b26(gitlab镜像id)

注意上面的docker run命令指定了域名为gitlab.weizhaohui.com,必须通过该域名才能访问gitlab,所以在gitlab容器启动前要先在虚拟机和本地配置ip与域名的映射关系.

 #在linux下:
 vi /etc/hosts
 #在windows下:
 cd C:\Windows\System32\drivers\etc\hosts

修改host文件在最下面添加

192.168.200.133 gitlab.weizhaohui.com

另外我们指定了三个端口,22表示ssh端口,80表示http端口,443表示https端口,分别映射到宿主机上的8022、48080和8443端口,我们还通过--volume指定目录映射,其中

/etc/gitlab表示gitlab的配置目录,映射到宿主机的/opt/gitlab/config目录.

/var/log/gitlab表示gitlab的日志目录,映射到宿主机的/opt/gitlab/logs目录.

/var/opt/gitlab表示gitlab的数据目录,映射到宿主机的/opt/gitlab/data目录.

访问502
出现原因:
1)当前虚拟机内存不够运行gitlab
2)端口冲突

进入gitlab容器
docker exec -it aab6a2b41338 /bin/bash

修改gitlab配置文件
vim /etc/gitlab/gitlab.rb

编辑内容
unicorn['port'] = 90901

基于Nginx进行访问

修改Nginx配置文件,配置请求转发

upstream docker_gitlab_server{
        server gitlab.weizhaohui.com:48080 weight=10;
    }
    
    #代理转发到docker下的gitlab
    server {
        listen       80;
        server_name itcast.gitlab.com;
        
        #GitLab服务器
        location / {  
            proxy_pass http://docker_gitlab_server;  
        } 
    }

访问GitLab

通过http://gitlab.weizhaohui.com:48080](http://gitlab.weizhaohui.com:48080 或者 http://gitlab.weizhaohui.com:48080](http://gitlab.weizhaohui.com:48080进行访问。进入修改管理员密码页面,我们将密码修改为12345678.
修改完密码后接着进入管理登录页面,输入登录用户名密码root/12345678登录进去.

Jenkins+Gitlab+Docker+Maven搭建CICD_第1张图片
image.png

新建项目

Jenkins+Gitlab+Docker+Maven搭建CICD_第2张图片
image.png

Jenkins+Gitlab+Docker+Maven搭建CICD_第3张图片
image.png

点击create project创建项目


Jenkins+Gitlab+Docker+Maven搭建CICD_第4张图片
image.png

将本地java代码推送至gitlab中

推送之前先全局设置git


Jenkins+Gitlab+Docker+Maven搭建CICD_第5张图片
image.png

Jenkins+Gitlab+Docker+Maven搭建CICD_第6张图片
image.png

使用IntelliJ IDEA 将项目发布(提交)到GitLab

Jenkins+Gitlab+Docker+Maven搭建CICD_第7张图片
image.png

当选择完add后,当前项目文件会从红色变为绿色。

接着选择Commit Directory。


Jenkins+Gitlab+Docker+Maven搭建CICD_第8张图片
image.png

点击Commit,这时本地提交成功,项目文件颜色从绿色变成了黑色.

接着push到Gitlab


Jenkins+Gitlab+Docker+Maven搭建CICD_第9张图片
image.png

在Define Remote窗口里面的URL中填入http://gitlab.weizhaohui.com:48080/root/demo.git。接着点击ok按钮弹出下面窗口

Jenkins+Gitlab+Docker+Maven搭建CICD_第10张图片
image.png

输入GitLab账号和密码:root/12345678

push成功之后刷新GitLab中的项目信息http://gitlab.weizhaohui.com:48080/root/demo

image.png

Jenkins安装

下载rpm包

官方下载地址:http://pkg.jenkins.io/redhat/。下载完成后,将当前下载的jenkins安装包上传到服务器。

安装jenkins的安装包

rpm -ivh  jenkins-2.201-1.1.noarch.rpm

安装完成后,配置jenkins环境

vi /etc/sysconfig/jenkins

修改

JENKINS_USER="root"
JENKINS_PORT="38888"
JENKINS_AJP_PORT="38009"

修改Jenkins 的java依赖环境

vim /etc/rc.d/init.d/jenkins
#源文件
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"

#修改后
candidates="
/usr/local/java/jdk1.8.0_202/bin/java
/usr/local/java/jdk1.8.0_202/jre/bin/java
"

启动和使用jenkins. 启动时候会出现一个警告,无需关注

[root@localhost ~]# service jenkins start
Starting jenkins (via systemctl):  Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
                                             [  确定  ]

其他操作命令

service jenkins  stop         #停止jenkins服务
service jenkins  restart      #重启jenkins服务,常用于修改配置文件后

启动完成后,进入jenkins。地址:http://192.168.200.135:38888.

Jenkins+Gitlab+Docker+Maven搭建CICD_第11张图片
image.png

在服务器上以下执行命令查看密码

cat /var/lib/jenkins/secrets/initialAdminPassword
image.png

将得到的密码进行输入,并跳转如下页面


Jenkins+Gitlab+Docker+Maven搭建CICD_第12张图片
image.png

在当前页面选择安装推荐的插件安装,进入到如下插件自动安装页面。


Jenkins+Gitlab+Docker+Maven搭建CICD_第13张图片
image.png

等待全部插件安装成功,如有安装失败,点击重试进行重新安装。如果全部安装失败,则更换镜像源。最终会进入到如下页面,
Jenkins+Gitlab+Docker+Maven搭建CICD_第14张图片
image.png

手动安装插件maven插件,,如果缺少Maven Integration Plugin插件,在创建job时,不会有新建一个maven项目选项.
image.png

配置Jenkins中全局环境jdk、maven、git

点击左侧菜单中的系统管理进入Jenkins管理模块。选择全局工具配置。


Jenkins+Gitlab+Docker+Maven搭建CICD_第15张图片
image.png

对于maven的设置可以手动指定不适用系统默认的maven配置文件,而使用自己的本地settings.xml。只需要指向这个文件地址即可。

git安装

1.安装依赖库
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

yum install gcc-c++ perl-ExtUtils-MakeMaker

yum -y install gcc

yum -y install autoconf

2.下载git的tar包
 https://github.com/git/git/releases  。 自行选择版本
 
3.解压tar包到后期需要目录挂载的文件夹,本次目录为/usr/local/git/
tar -zxvf git-2.19.2.tar.gz -C /usr/local/git/

4.进入目录
cd /home/git/git-2.19.2

5.执行make configure

6.配置目录:./configure --prefix=/usr/local/git/

7.执行 make profix=/usr/local/git/

8.执行make install进行安装

9.配置环境变量 echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile

10.刷新环境变量  source /etc/profile

11.查看版本  git --version  。  如果显示:git version 2.19.2 则证明安装成功!
Jenkins+Gitlab+Docker+Maven搭建CICD_第16张图片
image.png

jenkin下载GitLab插件,并设置连接gitlab

安装插件
image.png
设置gitlab连接信息

进入系统管理->系统设置。找到GitLab,设置gitLab连接信息


Jenkins+Gitlab+Docker+Maven搭建CICD_第17张图片
image.png

此时需要设置认证信息。先回到GitLab中,生成accessToken


Jenkins+Gitlab+Docker+Maven搭建CICD_第18张图片
image.png

回到Jenkins,点击添加认证
Jenkins+Gitlab+Docker+Maven搭建CICD_第19张图片
image.png

Jenkins+Gitlab+Docker+Maven搭建CICD_第20张图片
image.png

基础镜像创建&测试

创建jdk1.8镜像

1)创建目录

mkdir –p /usr/local/dockerjdk8

2)下载jdk-8u202-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录

3)创建文件Dockerfile

vi Dockerfile
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

4)构建镜像,注意后边的空格和点,不要省略

docker build -t='jdk1.8' .
Jenkins+Gitlab+Docker+Maven搭建CICD_第21张图片
image.png

5)查看镜像

docker images
image.png

6)创建容器

docker run -it --name=myjdk8 jdk1.8 /bin/bash
image.png

Docker私有仓库&DockerMaven插件安装

Docker私有仓库安装&镜像上传

1)拉取私有仓库镜像

docker pull registry

2)启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

3)打开浏览器 输入地址http://192.168.200.135:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
4)修改daemon.json

vi /etc/docker/daemon.json

添加以下内容,保存退出。

{"insecure-registries":["192.168.200.135:5000"]}   #用于让 docker信任私有仓库地址

5)重启docker 服务

systemctl restart docker

7)标记此镜像为私有仓库的镜像

docker tag jdk1.8 192.168.200.135:5000/jdk1.8

8)上传标记的镜像

docker push 192.168.200.135:5000/jdk1.8

9)查看私有私有仓库信息

http://192.168.200.135:5000/v2/_catalog
image.png

DockerMaven插件安装

1)开启Docker远程访问

 vi /usr/lib/systemd/system/docker.service
 
 #原内容
 #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 
 #修改后
 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

2)将管理地址写入 /etc/profile

echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile

source /etc/profile

3)docker重新读取配置文件,重启docker服务

systemctl daemon-reload

systemctl restart docker

4)查看docker进程,发现docker 守护进程在已经监听2375的tcp端口

ps -ef | grep docker 
image.png

5)查看系统的网络端口,发现tcp的2375端口的确是docker的守护进程在监听

netstat -tulp
Jenkins+Gitlab+Docker+Maven搭建CICD_第22张图片
image.png

6)用另外一台机器访问192.168.200.135服务器下的docker镜像信息

 docker -H tcp://192.168.200.135:2375 images
Jenkins+Gitlab+Docker+Maven搭建CICD_第23张图片
image.png

7)在changgou_eureka工程的pom文件添加如下内容


        changgoueureka
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
            
                com.spotify
                docker-maven-plugin
                0.4.13
                
                    192.168.200.135:5000/${project.artifactId}:${project.version}
                    java
                    ["java", "-jar", "/${project.build.finalName}.jar"]
                    
                        
                            /
                            ${project.build.directory}
                            ${project.build.finalName}.jar
                        
                    
                    http://192.168.200.135:2375
                
            
        
    

8)在changgou_eureka工程的src/main目录下创建docker目录,目录下创建Dockerfile文件,内容如下:

FROM jdk1.8
VOLUME /tmp
ADD changgoueureka.jar changgoueureka.jar
ENTRYPOINT ["java","-jar","/changgoueureka.jar"]

9)在windows的命令提示符下,进入changgou_eureka工程所在的目录,输入以下命令,进行打包和上传镜像

mvn clean package docker:build  -DpushImage

执行效果如下:

Jenkins+Gitlab+Docker+Maven搭建CICD_第24张图片
image.png

10)浏览器访问 http://192.168.200.135:5000/v2/_catalog ,输出效果如下
Jenkins+Gitlab+Docker+Maven搭建CICD_第25张图片
image.png

11)进入宿主机,查看镜像

docker images
Jenkins+Gitlab+Docker+Maven搭建CICD_第26张图片
image.png

12)启动容器

docker run -d --name=eureka -p 6868:6868 192.168.200.135:5000/changgou_eureka:1.0-SNAPSHOT 
image.png

Jenkins持续集成

1)创建任务
点击新建任务。


Jenkins+Gitlab+Docker+Maven搭建CICD_第27张图片
image.png

2)选择源码管理,选择Git,设置git连接信息


Jenkins+Gitlab+Docker+Maven搭建CICD_第28张图片
image.png

3)Build
Jenkins+Gitlab+Docker+Maven搭建CICD_第29张图片
image.png
clean package docker:build -DpushImage #用于清除、打包,构建docker镜像

最后点击“保存”按钮
4)返回首页,在列表中找到我们刚才创建的任务


Jenkins+Gitlab+Docker+Maven搭建CICD_第30张图片
image.png

击右边的绿色箭头按钮,即可执行此任务.

点击下面正在执行的任务

Jenkins+Gitlab+Docker+Maven搭建CICD_第31张图片
image.png

控制台输出
Jenkins+Gitlab+Docker+Maven搭建CICD_第32张图片
image.png

Jenkins+Gitlab+Docker+Maven搭建CICD_第33张图片
image.png

5)访问Docker私有仓库.http://192.168.200.135:5000/v2/_catalog
Jenkins+Gitlab+Docker+Maven搭建CICD_第34张图片
image.png

6)配置webhook
首先去jenkins系统管理下的插件管理,在线安装Gitlab Hook Plugin和Gitlab Plugin这两个插件,然后叫重启jenkins
Jenkins+Gitlab+Docker+Maven搭建CICD_第35张图片
image.png

7)安装插件后,进行jenkins的项目详情,查看当前项目的webhook地址
Jenkins+Gitlab+Docker+Maven搭建CICD_第36张图片
image.png

8)进入Gitlab,设置允许请求本地网络服务
点击页面做上角的扳手,或者输入地址:http://git.weizhaohui.com:48080/admin/application_settings/network
Jenkins+Gitlab+Docker+Maven搭建CICD_第37张图片
image.png

9)设置钩子地址,即jenkins中的项目地址
Jenkins+Gitlab+Docker+Maven搭建CICD_第38张图片
image.png

10)点击Add webhook保存信息后效果如下
Jenkins+Gitlab+Docker+Maven搭建CICD_第39张图片
image.png

点击test,选择勾选的权限进行测试。
Jenkins+Gitlab+Docker+Maven搭建CICD_第40张图片
image.png

11)集成测试
当在本地提交更新代码到gitlab后,可以发现jenkins会触发自动开始构建并最终提交到Docker私有仓库


Jenkins+Gitlab+Docker+Maven搭建CICD_第41张图片
image.png

Jenkins+Gitlab+Docker+Maven搭建CICD_第42张图片
image.png

你可能感兴趣的:(Jenkins+Gitlab+Docker+Maven搭建CICD)