美文网首页docker. k8s
Jenkins+Gitlab+Docker+Maven搭建CIC

Jenkins+Gitlab+Docker+Maven搭建CIC

作者: 辉_ace | 来源:发表于2019-11-18 18:10 被阅读0次

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

    环境说明

    虚拟机: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

    相关文章

      网友评论

        本文标题:Jenkins+Gitlab+Docker+Maven搭建CIC

        本文链接:https://www.haomeiwen.com/subject/eypbictx.html