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。html

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 的imagejava

#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:编写具体的业务逻辑linux

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中配置git

<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的打包命令web

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

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

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项目
这里首先测试一下,此时的链接是否成功:centos

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上。bash

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

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

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项目

相关文章
相关标签/搜索