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登录进去.

image.png

新建项目

image.png

image.png

点击create project创建项目


image.png

将本地java代码推送至gitlab中

推送之前先全局设置git


image.png

image.png

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

image.png

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

接着选择Commit Directory。


image.png

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

接着push到Gitlab


image.png

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

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.

image.png

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

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

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


image.png

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


image.png

等待全部插件安装成功,如有安装失败,点击重试进行重新安装。如果全部安装失败,则更换镜像源。最终会进入到如下页面,
image.png

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

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

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


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 则证明安装成功!
image.png

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

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

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


image.png

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


image.png

回到Jenkins,点击添加认证
image.png

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' .
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
image.png

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

 docker -H tcp://192.168.200.135:2375 images
image.png

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

<build>
        <finalName>changgoueureka</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>192.168.200.135:5000/${project.artifactId}:${project.version}</imageName>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <dockerHost>http://192.168.200.135:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>

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

执行效果如下:

image.png

10)浏览器访问 http://192.168.200.135:5000/v2/_catalog ,输出效果如下
image.png

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

docker images
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)创建任务
点击新建任务。


image.png

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


image.png

3)Build
image.png
clean package docker:build -DpushImage #用于清除、打包,构建docker镜像

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


image.png

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

点击下面正在执行的任务

image.png

控制台输出
image.png

image.png

5)访问Docker私有仓库.http://192.168.200.135:5000/v2/_catalog
image.png

6)配置webhook
首先去jenkins系统管理下的插件管理,在线安装Gitlab Hook Plugin和Gitlab Plugin这两个插件,然后叫重启jenkins
image.png

7)安装插件后,进行jenkins的项目详情,查看当前项目的webhook地址
image.png

8)进入Gitlab,设置允许请求本地网络服务
点击页面做上角的扳手,或者输入地址:http://git.weizhaohui.com:48080/admin/application_settings/network
image.png

9)设置钩子地址,即jenkins中的项目地址
image.png

10)点击Add webhook保存信息后效果如下
image.png

点击test,选择勾选的权限进行测试。
image.png

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


image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容