青年IT男

个人从事金融行业,就职过易极付、思建科技等重庆一流技术团队,目前就职于某网约车平台负责整个支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、人工智能等领域。

GitLab项目+Jenkins流水线

GitLab项目+Jenkins流水线

#集成GitLab的Webhooks
##Jenkins创建项目
3.png
选择流水线项目
01.png
配置token并复制url
4.png
Gitlab项目集成里面配置webhooks
1.png
在url地方粘贴jenkins提供的url:http://192.168.3.29:8888/job/user-edge-service/build?token=lj3fi2jif23232
2.png
配置Jenkins全局安全配置
6.png
去掉CSRF
7.png
测试WebHooks集成返回HTPT 201则为集成成功
8.png
9.png
###集成GitLab项目
在刚构建的Jenkins项目中配置如下脚本测试是否能正确拉去代码

#!groovy
pipeline{
    agent any

    environment{
        REPOSITORY="ssh://git@gitlab.mooc.com:2222/ouwen/microservice.git"
    }

    stages{
        stage('获取代码'){
            steps{
                echo "start fetch code from git:ssh://git@gitlab.mooc.com:2222/ouwen/microservice.git"
                deleteDir()
                git 'ssh://git@gitlab.mooc.com:2222/ouwen/microservice.git'
            }
        }
    }
}

构建项目
1.png
备注:在Jenkins应用所做服务器配置hosts
配置ssh key
2.png
在jenkins服务器配置访问gitlab的ssh key

#先看看是不是已经有啦,如果有内容就直接copy贴过去就行啦
$ cat ~/.ssh/id_rsa.pub
#如果上一步没有这个文件 我们就创建一个,运行下面命令(邮箱改成自己的哦),一路回车就好了
$ ssh-keygen -t rsa -C "youremail@example.com"
$ cat ~/.ssh/id_rsa.pub

3.png

Gitlab配置ssh key
4.png
5.png
6.png
再次尝试立即构建依然抱错
2.png
备注:Jenkins所做服务器手动尝试clone下项目后再去jenkins构建项目就可以了!
###编译+测试

#!groovy
pipeline{

    agent any

    environment{
        REPOSITORY='ssh://git@gitlab.mooc.com: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://git@gitlab.mooc.com: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镜像到自己仓库
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'

2.png
错误:需要的jenkins上登录镜像仓库
3.png
镜像可以完整上传到仓库
5.png

0
1028826685@qq.com