GitLab项目+Jenkins流水线

集成GitLab的Webhooks

Jenkins创建项目

GitLab项目+Jenkins流水线_第1张图片
3.png

选择流水线项目
GitLab项目+Jenkins流水线_第2张图片
01.png

配置token并复制url
GitLab项目+Jenkins流水线_第3张图片
4.png

Gitlab项目集成里面配置webhooks
GitLab项目+Jenkins流水线_第4张图片
1.png

在url地方粘贴jenkins提供的url:http://192.168.3.29:8888/job/user-edge-service/build?token=lj3fi2jif23232
GitLab项目+Jenkins流水线_第5张图片
2.png

配置Jenkins全局安全配置
GitLab项目+Jenkins流水线_第6张图片
6.png

去掉CSRF
7.png

测试WebHooks集成返回HTPT 201则为集成成功
GitLab项目+Jenkins流水线_第7张图片
8.png

GitLab项目+Jenkins流水线_第8张图片
9.png

集成GitLab项目

在刚构建的Jenkins项目中配置如下脚本测试是否能正确拉去代码

#!groovy
pipeline{
    agent any

    environment{
        REPOSITORY="ssh://[email protected]:2222/ouwen/microservice.git"
    }

    stages{
        stage('获取代码'){
            steps{
                echo "start fetch code from git:ssh://[email protected]:2222/ouwen/microservice.git"
                deleteDir()
                git 'ssh://[email protected]:2222/ouwen/microservice.git'
            }
        }
    }
}

构建项目


GitLab项目+Jenkins流水线_第9张图片
1.png

备注:在Jenkins应用所做服务器配置hosts
配置ssh key


GitLab项目+Jenkins流水线_第10张图片
2.png

在jenkins服务器配置访问gitlab的ssh key
#先看看是不是已经有啦,如果有内容就直接copy贴过去就行啦
$ cat ~/.ssh/id_rsa.pub
#如果上一步没有这个文件 我们就创建一个,运行下面命令(邮箱改成自己的哦),一路回车就好了
$ ssh-keygen -t rsa -C "[email protected]"
$ cat ~/.ssh/id_rsa.pub
GitLab项目+Jenkins流水线_第11张图片
3.png

Gitlab配置ssh key


GitLab项目+Jenkins流水线_第12张图片
4.png

GitLab项目+Jenkins流水线_第13张图片
5.png

GitLab项目+Jenkins流水线_第14张图片
6.png

再次尝试立即构建依然抱错


GitLab项目+Jenkins流水线_第15张图片
2.png

备注:Jenkins所做服务器手动尝试clone下项目后再去jenkins构建项目就可以了!

编译+测试

#!groovy
pipeline{

    agent any

    environment{
        REPOSITORY='ssh://[email protected]:2222/ouwen/microservice.git'
        MODULE='user-edge-service'
    }

    stages{
        stage('获取代码'){
            steps{
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
        stage('代码静态检查'){
            steps{
                echo "start code check"
                
            }
        }
        stage('编译+测试'){
            steps{
                echo "start compile"
                sh "mvn -U -pl ${MODULE} -am clean"
            }
        }
    }
}

说明mvn -U -pl -am 参数
-U 全部更新
-pl 构建指定模块
-am 构建当前模块依赖的模块

重新构建项目,注意这里使用maven构建和单元测试所以jenkins所在服务环境需要安装maven

下载地址
 http://maven.apache.org/download.cgi

版本 [apache-maven-3.3.9 -bin.tar.gz]

tar -xvf apache-maven-3.3.9-bin.tar.gz 

mv apache-maven-3.3.9 /usr/local/apache-maven

文件存放好之后,设置环境变量,打开etc/profile,在文件中加入下边的代码:

写入环境变量

vi /etc/profile 

最后一行加入

这个前提是安装了java1.8

export JAVA_HOME=/usr/local/jdk1.8
export MAVEN_HOME=/usr/local/apache-maven
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH

再执行

source /etc/profile

注意:这里配置了maven环境后在jenkins上立即构建项目依然找不到mvn命令,这里需要重启一下jenkins即可。

构建镜像+push到仓库

#!groovy
pipeline{

    agent any

    environment{
        REPOSITORY='ssh://[email protected]:2222/ouwen/microservice.git'
        MODULE='user-edge-service'
        SCRIPT_PATH="/root/build/"
    }

    stages{
        stage('获取代码'){
            steps{
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
        stage('代码静态检查'){
            steps{
                echo "start code check"
                
            }
        }
        stage('编译+测试'){
            steps{
                echo "start compile"
                sh "mvn -U -pl ${MODULE} -am clean package"
            }
        }
        stage('构建镜像+镜像推送'){
            steps{
                echo "start build images  and push images"
                sh "${SCRIPT_PATH}build-images.sh ${MODULE}"
            }
        }
    }
}

脚本

/root/build/build-images.sh

#!/bin/bash

MODULE=$1

TIME=`date "+%Y%m%d%H%M"`

GIT_REVISION=`git log -1 --pretty=format:"%h"`

IMAGE_NAME=harbor.ouwen.com/micro-service/${MODULE}:${TIME}_${GIT_REVISION}

cd ${MODULE}

docker build -t ${IMAGE_NAME} .

echo `ls`

cd -

echo `pwd`

docker push ${IMAGE_NAME}

echo "{IMAGE_NAME}" > IMAGE_NAME

更新脚本执行权限

chmod 775 build-images.sh

Jenkins构建项目

错误:需要push jdk镜像到自己仓库


GitLab项目+Jenkins流水线_第16张图片
1.png

错误:配置文件的默认路径:/etc/docker/daemon.json

{
  "registry-mirrors": ["http://harbor.test.com"], #镜像加速地址
  "insecure-registries": ["harbor.ouwen.com"], # Docker如果需要从非SSL源管理镜像,这里加上
}
部分参数(registry-mirrors、insecure-registries ...)修改,只要reconfigure(systemctl reload docker) 就生效:

这部分参数详细列表:[https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)

注意:上面的方法如果不生效可以试试下面方法
  1.修改配置文件:/usr/lib/systemd/system/docker.service
  ExecStart=/usr/bin/dockerd-current \ 
        --insecure-registry harbor.ouwen.com \
  2.systemctl daemon-reload
  3.service docker restart
  4.删除掉 /etc/docker/damon.json中的--insecure-registry配置
  5.配置/etc/sysconfig/docker
     添加OPTIONS='--insecure-registry registry:5000'
GitLab项目+Jenkins流水线_第17张图片
2.png

错误:需要的jenkins上登录镜像仓库


GitLab项目+Jenkins流水线_第18张图片
3.png

镜像可以完整上传到仓库


GitLab项目+Jenkins流水线_第19张图片
5.png

你可能感兴趣的:(GitLab项目+Jenkins流水线)