持续集成go项目

135 阅读2分钟

前言

本章节基于gitlab+docker+harbor+jenkins部署go项目,大致流程参考以下图片

clipboard.png

未安装上述环境的可参考本人历史文章

开始集成

前提条件

1.在jenkinsfile中使用docker命令

启动jenkins容器时,需要把docker挂载进jenkins里

docker run -itd 
--name jenkins 
-e  TZ=Asia/Shanghai
-u root 
--restart=always 
-p 8989:8080 -p 50000:50000 
-v /home/jenkins:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v  /usr/bin/docker:/usr/bin/docker   
--env JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxNewSize=256m"
jenkins/jenkins:latest

在插件管理中安装Docker Pipeline

image.png

配置Harbor仓库登录凭据,ID请记住,后续会用到

image.png

配置jenkins全局变量,我这里配了Harbor镜像仓库相关的

image.png

在jenkinsfile中使用docker命令

1.通过shell命令使用 image.png

2.通过Docker Pipeline插件使用

默认情况下,Docker Pipeline 集成使用 Docker Hub 的默认 Docker Registry。

要使用自定义 Docker Registry,脚本式 Pipeline 的用户可以使用 withRegistry() 方法包裹每个步骤,并传入指定的 Registry 的 URL

对于需要身份验证的Docker注册表,请从Jenkins主页添加“用户名/密码”凭据项,并将凭据ID作为第二个参数使用withRegistry()

image.png

1.在jenkinsfile中使用go(本章未使用,可做了解)

进入插件管理 image.png

安装go插件 image.png

集成go image.png

image.png

简易版jenkinsfile文件


pipeline {
    agent any

//     tools {
//     go 'golang'
//     }
    //定义全局环境变量
    environment{
    HARBOR_SUBJECT='bbcl-fms'  //指定要发布到harbor的仓库地址
    HARBOR_NETWORK='http://'  //指定harbor协议
    }


    stages {
        stage("git codes") {
            steps {
            sh '''
            echo '切换工作目录'
            cd $WORKSPACE
            echo '设置环境'
            export GOPROXY=https://goproxy.cn,direct
            '''
            sh '''
            echo '检出指定分支'
            git checkout $FMS_BRANCH
            echo '拉取代码'
            git lfs pull
            '''
            echo '拉去代码结束'
            }
        }
        stage("build and publish docker image") {
            steps {
            sh 'cd $WORKSPACE'
            buildImage('financial-api',BUILD_ID)
//             sh '''
//                echo '登录docker'
//                docker login ${HARBOR_URL} -u ${HARBOR_USER} -p ${HARBOR_PASSWORD}
//                echo '构建镜像'
//                docker build -t ${HARBOR_URL}/${HARBOR_SUBJECT}/bbcl-fms-financial-api:v3 -f ./app/financial-api/Dockerfile .
//                echo '推送镜像到仓库'
//                docker push ${HARBOR_URL}/${HARBOR_SUBJECT}/bbcl-fms-financial-api:v3
//             '''

            }
        }
        stage("3.构建") {
            steps {
                echo '开始构建'
                echo '构建成功'
            }
        }
        stage("4.部署") {
            steps {
                echo '开始传包'
                echo '传包成功'
                echo '开始部署'
                echo '部署成功'
            }
        }
    }
    post {
        success {
            echo '执行成功 successful'
        }
        failure {
            echo '执行失败 failed'
        }
    }
}

def buildImage(objectName, version) {
    def customImage = docker.build(HARBOR_URL+'/'+HARBOR_SUBJECT+'/'+objectName+':'+version,"-f $WORKSPACE/app/"+objectName + "/Dockerfile .")

    docker.withRegistry(HARBOR_NETWORK+HARBOR_URL, 'dockerlogin') {
        customImage.push()
    }
    docker.image(HARBOR_URL+'/'+HARBOR_SUBJECT+'/'+objectName+':'+version).run('-itd  -p 8302:8302')

}