最近因为公司需要,所以搭建了一套持续集成的环境。再此记录一下。如转载,请标明出处。
环境说明
虚拟机: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登录进去.
新建项目
点击create project创建项目
将本地java代码推送至gitlab中
推送之前先全局设置git
使用IntelliJ IDEA 将项目发布(提交)到GitLab
当选择完add后,当前项目文件会从红色变为绿色。
接着选择Commit Directory。
点击Commit,这时本地提交成功,项目文件颜色从绿色变成了黑色.
接着push到Gitlab
在Define Remote窗口里面的URL中填入http://gitlab.weizhaohui.com:48080/root/demo.git。接着点击ok按钮弹出下面窗口
输入GitLab账号和密码:root/12345678
push成功之后刷新GitLab中的项目信息http://gitlab.weizhaohui.com:48080/root/demo
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.
在服务器上以下执行命令查看密码
cat /var/lib/jenkins/secrets/initialAdminPassword
将得到的密码进行输入,并跳转如下页面
在当前页面选择安装推荐的插件安装,进入到如下插件自动安装页面。
等待全部插件安装成功,如有安装失败,点击重试进行重新安装。如果全部安装失败,则更换镜像源。最终会进入到如下页面,
手动安装插件maven插件,,如果缺少Maven Integration Plugin插件,在创建job时,不会有新建一个maven项目选项.
配置Jenkins中全局环境jdk、maven、git
点击左侧菜单中的系统管理进入Jenkins管理模块。选择全局工具配置。
对于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 则证明安装成功!
jenkin下载GitLab插件,并设置连接gitlab
安装插件
设置gitlab连接信息
进入系统管理->系统设置。找到GitLab,设置gitLab连接信息
此时需要设置认证信息。先回到GitLab中,生成accessToken
回到Jenkins,点击添加认证
基础镜像创建&测试
创建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' .
5)查看镜像
docker images
6)创建容器
docker run -it --name=myjdk8 jdk1.8 /bin/bash
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
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
5)查看系统的网络端口,发现tcp的2375端口的确是docker的守护进程在监听
netstat -tulp
6)用另外一台机器访问192.168.200.135服务器下的docker镜像信息
docker -H tcp://192.168.200.135:2375 images
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
执行效果如下:
10)浏览器访问 http://192.168.200.135:5000/v2/_catalog ,输出效果如下
11)进入宿主机,查看镜像
docker images
12)启动容器
docker run -d --name=eureka -p 6868:6868 192.168.200.135:5000/changgou_eureka:1.0-SNAPSHOT
Jenkins持续集成
1)创建任务
点击新建任务。
2)选择源码管理,选择Git,设置git连接信息
3)Build
clean package docker:build -DpushImage #用于清除、打包,构建docker镜像
最后点击“保存”按钮
4)返回首页,在列表中找到我们刚才创建的任务
击右边的绿色箭头按钮,即可执行此任务.
点击下面正在执行的任务
控制台输出
5)访问Docker私有仓库.http://192.168.200.135:5000/v2/_catalog
6)配置webhook
首先去jenkins系统管理下的插件管理,在线安装Gitlab Hook Plugin和Gitlab Plugin这两个插件,然后叫重启jenkins
7)安装插件后,进行jenkins的项目详情,查看当前项目的webhook地址
8)进入Gitlab,设置允许请求本地网络服务
点击页面做上角的扳手,或者输入地址:http://git.weizhaohui.com:48080/admin/application_settings/network
9)设置钩子地址,即jenkins中的项目地址
10)点击Add webhook保存信息后效果如下
点击test,选择勾选的权限进行测试。
11)集成测试
当在本地提交更新代码到gitlab后,可以发现jenkins会触发自动开始构建并最终提交到Docker私有仓库