赞
踩
接前文,已经在windows电脑上安装了虚拟机,部署安装了Docker和Gitlab,为了模拟实现实际工作中使用Jenkins完成持续集成和持续部署,现在此基础上,试着搭建Docker+Jenkins+Gitlab+Maven的持续集成环境。
目录
大体步骤如下:
注意在安装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已经启动成功了。
1、登录:http://192.168.112.11:38080/
2、 让输入密码,通过下面的命令获得
cat /opt/jenkins/secrets/initialAdminPassword
修改密码后,重新登录:
3、进去以后,安装推荐插件
4、开始使用
5、进行系统设置:
6、进入全局设置
7、设置JDK和maven自动安装:
8、新建一个构建JOB任务
设置gitlab地址 和代码分支
设置编译后shell脚本,制作镜像,发布到docker执行
上面截图中的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
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
idea项目代码结构及Dockerfile内容如下:
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"]
查看执行结果:
去虚拟机上看下运行的docker容器,可以看到23#版本的项目已经成功部署到容器里了。
访问测试:
说明Jenkins部署成功。
附:参考:
Jenkins+Docker+Gitlab+Maven搭建持续集成环境 - 简书
https://www.jianshu.com/p/61adada18438
https://www.it610.com/article/1187248456125751296.htm
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。