docker. k8s

Jenkins+Gitlab+Docker+Maven搭建CIC

2019-11-18  本文已影响0人  辉_ace

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

环境说明

虚拟机: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
上一篇下一篇

猜你喜欢

热点阅读