gitlab+jenkins+harbor自动化打包部署maven项目

  最近接到一个任务,就是讲本地的maven项目,提交到gitlab上然后使用jenkins自动化集成,打包,生成镜像,最后将镜像上传到harbor中,实现自动化的部署上线。总结这篇帖子的原因是,作为一个刚刚接触docker的小白,也翻了很多篇博主的博客,经过了二个星期的洗礼,终于把这套流程走通了,这里分享给大家,也让大家少走一些弯路。
  首先向大家介绍一些我的环境,我是在k8s上,安装了3个组件:gitlab、jenkins、harbor,并且映射了端口,这样可以供外部访问。所以我做的操作是jenkins基于k8s的自动化集成,并且使用的pipeline流水线任务。
  目的:本地编写web项目----》上传到gitlab----》使用jenkins集成----》提交到harbor----》测试是否新发布的image可以使用,并且其中的web项目可以供外部访问。本案例主要介绍一套流程热点配置,其中的web项目只是简单的实现hello World。

1.创建web项目并上传至gitlab:

创建一个项目,填写项目名称,并设置项目为私有:
gitlab+jenkins+harbor自动化打包部署maven项目
接着将本地项目提交到gitlab上管理:
gitlab+jenkins+harbor自动化打包部署maven项目
这里的对应步骤为:
A) 初始化项目为git项目:git init
B) 连接远程gitlab:
git remote add origin http://172.18.28.13:32582/devops_test_group/devops_test_project.git
C) 将项目提交本地git仓库:git add . &&git commit -m “Initial commit”
D) 将本地仓库推送到远端gitlab仓库:git push -u origin master
完成以上步骤,就可以在gitlab中刚刚创建的项目中看见自己的本地项目中的内容:
gitlab+jenkins+harbor自动化打包部署maven项目
项目介绍
gitlab+jenkins+harbor自动化打包部署maven项目
这是我项目的结构:
docker/dockerfile:build docker 的image

#docker/dockerfile
FROM centos

MAINTAINER docer_user

RUN yum install httpd
RUN echo "/usr/sbin/httpd -DFOREGROUND" > /usr/local/bin/start.sh
RUN chmod a+x /usr/local/bin/start.sh
COPY ./*.war /var/www/html
RUN echo "启动Tomcat服务"
EXPOSE 80
注意:这个dockerfile就是简单的下载一个httpd服务,并将打好的war包,放入/var/www/html,
并暴露了80端口,只要启动httpd服务,就可以访问到我们的上线的web项目。

main/java:编写具体的业务逻辑

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloWorld extends HttpServlet {
    private String message;

    @Override
    public void init() throws ServletException {
        message = "Hello world, this message is from servlet!";
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应内容类型
        resp.setContentType("text/html");

        //设置逻辑实现
        PrintWriter out = resp.getWriter();
        out.println("<h1>" + message + "</h1>");
    }

    @Override
    public void destroy() {
        super.destroy();
    }
}

在web.xml中配置

<servlet>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>com.zy.web.HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

build.sh:maven的打包命令

#!/bin/sh
mvn clean package   #将maven项目打包

Jenkinsfile:流水线任务的自动化部署文件:

pipeline {
    agent {
        label "zjnx"
    }
     environment {
            //本地harbor的地址
            DOCKER_REPO_URL  = "172.18.28.37:32702"
    }
    stages {
        stage('Example Build') {
            environment {
                        BUILDER = "gold"
                        IMAGE_TAG = "master"
                        JAVA_HOME = "/usr/jdk-8u131-linux-x64.tar/jdk1.8.0_131/"
            }
            steps {
            container('maven') {
                sh '''startdocker.sh $DOCKER_REPO_URL &'''
                sh '''chmod a+x build.sh
                ./build.sh
                cp target/*.war src/docker/
                cd src/docker && docker build . -t devops-web-test:latest
                docker tag devops-web-test:latest ${DOCKER_REPO_URL}/${BUILDER}/devops-web-test:${IMAGE_TAG}
                docker push ${DOCKER_REPO_URL}/${BUILDER}/devops-web-test:${IMAGE_TAG}'''
                }
            }
        }
    }
}
注意:这里具体的将maven项目打包,构建一个docker 的image,并将构建的image打标签,推送至自己的harbor仓库中。

2.使用jenkins持续集成项目

新建视图
gitlab+jenkins+harbor自动化打包部署maven项目
新建任务
gitlab+jenkins+harbor自动化打包部署maven项目
接着,后面的构建触发器是选择构建项目的触发方式,触发方式有定期触发,构建其他项目之后触发,gitlab有新推送时触发等等,可以根据需要自行选择,推荐选择Poll SCM,也就是周期性轮询gitlab,如果有代码合入,则触发构建的配置。 轮询周期可以基于crontab的时间样式配置。比如H 代表每小时轮询一次。
gitlab+jenkins+harbor自动化打包部署maven项目
然后是流水线配置,选择pipeline script from scm,scm选择git,url使用前面gitlab中的项目地址http://172.18.28.13:32582/devops_test_group/devops_test_project.git
gitlab+jenkins+harbor自动化打包部署maven项目
这里注意,如果是事先没有创建用户的还,这里点击add,添加一个连接gitlab的用户:
gitlab+jenkins+harbor自动化打包部署maven项目
填写正确的用户名,和密码:
gitlab+jenkins+harbor自动化打包部署maven项目
选择检出的分支,默认是master:
gitlab+jenkins+harbor自动化打包部署maven项目
完成上面的配置,需要配置系统:
gitlab+jenkins+harbor自动化打包部署maven项目
在这里把执行者数量改成大于0
gitlab+jenkins+harbor自动化打包部署maven项目
Jenkins安装后,默认会配置一个Kubernetes Cloud。如下图所示
gitlab+jenkins+harbor自动化打包部署maven项目
这里首先测试一下,此时的连接是否成功:

gitlab+jenkins+harbor自动化打包部署maven项目
配置kubernetes Pod template
gitlab+jenkins+harbor自动化打包部署maven项目
gitlab+jenkins+harbor自动化打包部署maven项目
注意:Labels:这里的labels会在之后项目的jenkinsfile中使用到(二者必须配置一样)
 Namespace:是我k8s集群中的namespace。
docker image:可以在:
上面这个模板的Name一定要是:jnlp
gitlab+jenkins+harbor自动化打包部署maven项目
由于使用maven工具打包,这一还需要配置一个模板
gitlab+jenkins+harbor自动化打包部署maven项目
注意:这里的name在编写的jenkins中会使用到。
docker image:可以在
docker pull tcregistry.starcloud.io/devops/base/builder:centos2018/9/
拉取之后,上传到自己的harbor上。

注意:两个模板中gitlab+jenkins+harbor自动化打包部署maven项目 这里需要勾上。
配置Pod Env:
gitlab+jenkins+harbor自动化打包部署maven项目
上面的jenkins的URL可以在这里找到:
gitlab+jenkins+harbor自动化打包部署maven项目
Pod annotation配置
gitlab+jenkins+harbor自动化打包部署maven项目
名称为:命名空间_shared
配置完如上配置之后,点击保存。

此时我们再看在gitlab中的项目:
gitlab+jenkins+harbor自动化打包部署maven项目
其中注意:这里解释jenkinsfile中的几点:
gitlab+jenkins+harbor自动化打包部署maven项目
最后,构建刚刚的任务
gitlab+jenkins+harbor自动化打包部署maven项目
如果成功的话:
gitlab+jenkins+harbor自动化打包部署maven项目
此时可以做一个测试:(从harbor中下载镜像,并且运行),我们在创建一个流水线任务:(直接编写脚本即可):
gitlab+jenkins+harbor自动化打包部署maven项目
将以下内容copy到脚本中:

pipeline {
    agent {
        label "zjnx"
    }
     environment {
            //该docker url是tdc上安装的harbor的地址
            DOCKER_REPO_URL  = "172.18.28.37:32702"
    }
    stages {
        stage('Example Build') {
            environment {
                        BUILDER = "gold"
                        IMAGE_TAG = "master"
                        JAVA_HOME = "/usr/jdk-8u131-linux-x64.tar/jdk1.8.0_131/"
            }
            steps {
            container('maven') {
                sh '''startdocker.sh $DOCKER_REPO_URL &'''
                sh '''docker pull 172.18.28.37:32702/gold/devops-web-test:master
                docker run -it -d -p 9999:80 172.18.28.37:32702/gold/devops-web-test:master /bin/bash -c /usr/local/bin/start.sh
                docker images
                docker ps -a 
                '''
            }
            }
        }
                    }
}

构建成功之后,能看到上一个任务push到harbor的镜像,被pull下来,并且可以运行:
gitlab+jenkins+harbor自动化打包部署maven项目

转载于:https://blog.51cto.com/14048416/2376850

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值