docker容器自动化部署落地实践之五:用jenkins+gitlab+docker完成容器化工程自动化部署集成

这一步完成了 我们就可以完成我们整个流程了:

工程修改后push到gitlab >> gitlab通过webhook通知jenkins工程有改变 >>jenkins到gitlab取最新工程 >> jenkins完成容器构建 >> push到docker hub >> 让单台或多台服务器同时拉下这个镜像并运行

由于笔者服务器资源有限 这里不做多台服务器的部署构建演示 思路是一样的 push到docker hub后 读者可以用jenkins中的构建命令通过ssh连接多台机器 让其pull下镜像并运行即可 如有kubernetes 则以jenkins构建的服务器作为kubernetes的master去控制整个集群即可 可以避免ssh多台机器 详细流程这里也不赘述 后期若有时间将会为大家写相关文章

在第二章的时候 我们上传了一个工程到gitlab 现在我们要将他与jenkins的工程做webhook 实现一键push部署

笔者工程的结构是如下的 如果是java工程的小伙伴们 可以按照如下的流程做配置

search
|-----api
|-----service
|----build.sh
|---- src
|-----main
|-----docker
|-----Dockerfile


一个比较典型的微服务应用 这里只强调应用中的两个比较重要的文件 一个是Dockerfile 另外一个是build.sh

pom.xml文件加入以下内容

<build> 
  <plugins> 
    <plugin> 
      <groupId>com.spotify</groupId>  
      <artifactId>docker-maven-plugin</artifactId>  
      <version>0.4.3</version>  
      <configuration> 
        <imageName>${docker.image.prefix}/${company.name}:${project.parent.artifactId}.${project.port}</imageName>  
        <dockerDirectory>src/main/docker</dockerDirectory>  
        <exposes>${project.port}</exposes>  
        <resources> 
          <resource> 
            <targetPath>/</targetPath>  
            <directory>${project.build.directory}</directory>  
            <include>${project.build.finalName}.jar</include> 
          </resource> 
        </resources> 
      </configuration> 
    </plugin> 
  </plugins> 
</build>
<properties> 
  <docker.image.prefix>huaihkiss</docker.image.prefix>  
  <company.name>companyname</company.name>  
  <project.port>9875</project.port> 
</properties>
在该服务的service工程下边 创建一个目录到src/main下边 目录名为docker 在该目录下创建一个Dockerfile文件 内容如下

FROM huaihkiss/centos7-base:jdk-1.8
#将jdk镜像作为基础镜像
MAINTAINER huaihkiss <1174889899@qq.com>
#作者信息
VOLUME /tmp
VOLUME ~/
#VOLUME是挂载 将/tmp挂载到宿主机 ~/目录也就是用户目录 这个目录笔者用来放工程日志
ADD service-1.0-SNAPSHOT.jar /search-app.jar
#将mvn 构建后的jar包放在容器根目录下
RUN sh -c 'touch /search-app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /search-app.jar"]
CMD /usr/sbin/sshd -D
然后在该服务的service工程下边 创建一个文件 名为build.sh 内容如下 带中文注释的可以按照自身配置修改 下边的除非是项目结构不同 否则不要修改

#!/bin/bash

source /etc/profile

#project build variable
#you can change this code for your project
###START###
#docker hub 仓库名
DOCKERRESPOSITORYUSERNAME=huaihkiss
#docker hub用户名
DOCKERLOGINUSERNAME=huaihkiss
#dockerhub密码
DOCKERLOGINPASSWORD=password
#dockerhub 仓库tag名
RESPOSITORYNAME=xhgoo
#应用名称
APPNAME=search
#应用端口
APPPORT=9875
#容器端口
INPORT=9875
#宿主机映射端口
OUTPORT=9875
#挂载宿主机目录
HOSTPATH=~/
#被挂载的容器目录
CONTAINNERPATH=/root
#容器名称
CONTAINNERNAME=${APPNAME}-${APPPORT}
#镜像名称
MYIMAGE=${DOCKERRESPOSITORYUSERNAME}/${RESPOSITORYNAME}:${APPNAME}.${APPPORT}
###END###

#don't change this code
###START###
cd ../
mvn clean
mvn install
cd -
# uncomment if you need push
docker login -u ${DOCKERLOGINUSERNAME} -p ${DOCKERLOGINPASSWORD}
# stop all container
docker stop ${CONTAINNERNAME}
# remove all container
docker rm ${CONTAINNERNAME}
# remove old images
docker rmi ${MYIMAGE}
# build jar and image
#mvn package -e -X docker:build -DskipTest
mvn package docker:build
# push image
#docker push ${MYIMAGE}
# running container
docker run -it -dp ${OUTPORT}:${INPORT} -v ${HOSTPATH}:${CONTAINNERPATH} --name ${CONTAINNERNAME} ${MYIMAGE} /bin/bash
###END###
之后push到gitlab上边

打开jenkins 创建一个新任务


如下图操作、


选git 填入gitlab上边需要持续集成的工程地址 之后点Credentials旁边的add




输入gitlab上边的账号密码 点add


选择刚刚录入的账号密码


构建触发器在Build when a change is pushed to GitLab. GitLab CI Service 前打勾并复制那个url然后点击Generate按钮 生成一串secret token 保存起来


构建那里选择Execute shell


填入刚刚我们编写的构建程序build.sh

chmod 777 service/build.sh
cd service
./build.sh
点击保存

注意一点:jenkins在安装的时候会创建一个jenkins账户 jenkins完成大部分的操作都是通过这个账户来完成的 所以有可能会遇到构建的时候没有权限的情况出现 这个时候 我们需要给jenkins账户赋予一个合适的权限 

笔者这里给jenkins用户改了用户组为root用户组 作为演示 读者可以根据需要修改自己的用户组

vim /etc/passwd

jenkins:x:990:0:Jenkins Automation Server:/var/lib/jenkins:/bin/false
保存 然后返回到gitlab的工程当中 选settings下边的 Integrations



将刚刚复制的jenkins ci地址与secret token粘贴上来 按照如图打勾 保存


还是那个页面 test一下刚刚的webhook是否可用 如图所示


如图所示 200的话 那么已经ok了


这时候到jenkins看看 已经开始构建了 点击它


点击console output 可以查看日志


这个就是构建过程的日志


现在测试webhook已经测试成功了 我们再来测试一下在ide中push代码 jenkins会不会自动构建 这里笔者把端口号改成了9876


提交代码


看看jenkins 已经开始构建了 


点击进去看日志



查看jenkins首页 可以看到工程状态信息


在服务器上通过docker命令查看镜像 可以发现已经构建成镜像了

docker images


查看镜像 

docker ps -a

已经成功运行 现在只要在ide上边push一下 就可以实现自动化构建容器应用了

如果想让多台服务器运行该容器的话 则可以在build.sh里边用远程ssh执行命令的方式 或者k8s去构建



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值