Docker+Jenkins+Gitlab+Maven搭建持续集成环境

        接前文,已经在windows电脑上安装了虚拟机,部署安装了Docker和Gitlab,为了模拟实现实际工作中使用Jenkins完成持续集成和持续部署,现在此基础上,试着搭建Docker+Jenkins+Gitlab+Maven的持续集成环境。

目录

1、Docker下安装Jenkins

2、访问Jenkins,创建构建任务

3、开始在Jenkins上部署


大体步骤如下:

  • 开发人员通过IDE工具将代码推送到gitlab.
  • jenkins从gitlab中获取到源码,并使用maven编译、打包、自动构建镜像.
  • jenkins在构建脚本中调用docker命令将构建好的镜像push到本地Docker Registry.并启动相应的容器.
  • jenkins构建失败或者成功,可以及时将结果推送给相关人员,比如测试人员,安排测试.
  • 运维人员只需获取相应的镜像就可以快速发布到生产环境

1、Docker下安装Jenkins

注意在安装Jenkins时踩过的坑:
A、安装的不是最新版本的Jenkins,导致在下载插件时总是失败。
    解决:使用最新版本lts
B、因为没有跟虚拟机内的docker共用一个docker,导致Jenkins里编译后处理的shell脚本里不认识docker命令
    解决:使用dood方式重新编译Jenkins,共用宿主机内的docker

下面详细说明。

①、首先在docker官方仓库网页搜索jenkins的镜像。注意,要安装的是 jenkins/jenins:lts,不是jenins,后者已经被官方废弃了。

docker pull jenkins/jenkins:lts

②、因为自己的docker和Jenkins安装在同一虚拟机下,并且打算在Jenkins的编译后处理里使用的shell脚本里,也想使用docker环境,但如果不加配置,则会在shell脚本执行时报:Docker not found错误。因此,决定使用dood方案,以使得在docker容器中使用宿主机上的docker服务。

②-1.先删掉之前建好的jenkins容器和镜像,然后在虚拟机上创建一个空的Dockerfile文件.

[root@bogon jenkins-dood]# touch Dockerfile

②-2.编写Dockerfile脚本

[root@bogon jenkins-dood]# vi Dockerfile

FROM jenkins/jenkins:lts
USER root
ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

USER jenkins

②-3.重新构建jenkins镜像

[root@bogon jenkins-dood]# docker build -t jenkins .

②-4.在启动Jenkins容器时,我们需要先创建一个Jenkins的配置目录,并且挂载到docker 里的Jenkins目录下.

[root@bogon /]# mkdir -p /opt/jenkins-dood

②-5.修改目录权限.

[root@bogon /]# chown -R 1000 /opt/jenkins-dood

②-6.开始运行jenkins容器

docker run \
 -d \
 -p 38080:8080 \
 -p 50000:50000 \
 --name jenkins \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v $(which docker):/bin/docker \
 -v /opt/jenkins-dood:/var/jenkins_home \
-u root \
 --link gitlab:127.0.0.1 \
jenkins/jenkins:lts

开放端口:

firewall-cmd --zone=public --add-port=38080/tcp --permanent

至此,Jenkins已经启动成功了。

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第1张图片

2、访问Jenkins,创建构建任务

1、登录:http://192.168.112.11:38080/

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第2张图片

2、 让输入密码,通过下面的命令获得

cat /opt/jenkins/secrets/initialAdminPassword

修改密码后,重新登录:
Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第3张图片

3、进去以后,安装推荐插件

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第4张图片

4、开始使用

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第5张图片

5、进行系统设置:

6、进入全局设置

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第6张图片

7、设置JDK和maven自动安装: 

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第7张图片

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第8张图片

 8、新建一个构建JOB任务

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第9张图片

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第10张图片

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第11张图片

设置gitlab地址 和代码分支

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第12张图片

 设置编译后shell脚本,制作镜像,发布到docker执行

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第13张图片

上面截图中的shell脚本代码如下:

#定义变量
API_NAME="cullinan"
API_VERSION="1.0.0"
API_PORT=58080
IMAGE_NAME="192.168.112.11:58080/cullinan/$API_NAME:$BUILD_NUMBER"
CONTAINER_NAME=$API_NAME-$API_VERSION

#进入target目录复制Dockerfile文件(目前Dockerfile就在项目工作空间下)
#cd $WORKSPACE/$API_NAME/target
#cp classes/Dockerfile .

#构建docker镜像
docker build -t $IMAGE_NAME .

#推送docker镜像 (目前Docker与Jenkins在同一虚拟机下,无需推送)
#docker push $IMAGE_NAME

#删除docker容器
cid=$(docker ps | grep "$CONTAINER_NAME" | awk '{print $1}')
if [ "$cid" != "" ]; then
   docker rm -f $cid
fi

#启动docker容器
docker run -d -p $API_PORT:58080 --name $CONTAINER_NAME $IMAGE_NAME

#删除Dockerfile文件
rm -f Dockerfile

idea项目代码结构及Dockerfile内容如下:

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第14张图片

Dockerfile文件

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD $WORKSPACE/$API_NAME/target/cullinan-1.0.0-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
RUN echo "Asia/Shanghai" > /etc/timezone
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

3、开始在Jenkins上部署

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第15张图片

 查看执行结果:Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第16张图片

去虚拟机上看下运行的docker容器,可以看到23#版本的项目已经成功部署到容器里了。

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第17张图片

访问测试:

Docker+Jenkins+Gitlab+Maven搭建持续集成环境_第18张图片

说明Jenkins部署成功。

附:参考:

Jenkins+Docker+Gitlab+Maven搭建持续集成环境 - 简书

https://www.jianshu.com/p/61adada18438
https://www.it610.com/article/1187248456125751296.htm

基于Docker+Jenkins+Gitlab搭建持续集成环境 - clearriver - 博客园

你可能感兴趣的:(云原生,jenkins,maven,docker)