delete chart
lu.jin(卢进) authored
0a109436

Kubernetes 的CI流程方案


流程架构图

依赖:

  • Jenkins
  • Gitlab
  • Docker
  • Harbor
  • Helm chart
  • Minio(blob)

Jenkins 配置

  1. 下载安装 gitlab 插件 GitLab Plugin

  2. 创建pipeline

  3. 配置pipeline

  4. 配置Build Triggers

  5. 配置参数

    参数包括: minio_url,minio_access_key,minio_secret_key,minio_bucket,harbor_url,harbor_username,harbor_password,harbor_project

Gitlab 配置

配置 Webhook

URL 和 Secret Token为jenkins配置Build Triggers时生成

Gitlab Code 结构

编写 Dockerfile

  1. 在项目根目录创建 Dockerfile 文件
  2. Dockerfile 文件格式
FROM maven:3.6.1-jdk-8 AS build-env
ADD . /opt
WORKDIR /opt
RUN mvn package

FROM harbor.wise-paas.io/library/mc:v1 AS UploadBlob
ARG VERSION
ARG MINIO_URL
ARG MINIO_ACCESS_KEY
ARG MINIO_SECRET_KEY
ARG MINIO_BUCKET
COPY --from=build-env /opt /opt
RUN mkdir helloword && cp /opt/target/*.jar helloword && cp /opt/manifest.yml helloword
WORKDIR /helloword
RUN zip helloworld-$VERSION.zip ./* && mc config host add minio $MINIO_URL $MINIO_ACCESS_KEY $MINIO_SECRET_KEY && mc cp helloworld-$VERSION.zip minio/$MINIO_BUCKET

FROM harbor.wise-paas.io/distroless/java:8
ARG VERSION
COPY --from=build-env /opt/target /opt/target
WORKDIR /opt/target
EXPOSE 8080
CMD ["helloworld-$VERSION.jar"]

第一个image 为项目编译所需环境,对项目进行编译打包
第二个image 是将第一步编译打包的结果上传blob(通过minio)
第三个image 为项目最终运行image
注:此为demo(helloworld)项目Dockerfile,其他项目只需修改helloworld为项目名即可

编写 Jenkinsfile

pipeline {
  agent { label 'docker-dind' }
    post {
      failure {
        updateGitlabCommitStatus name: 'build', state: 'failed'
      }
      success {
        updateGitlabCommitStatus name: 'build', state: 'success'
      }
    }
    options {
      gitLabConnection('gitlab')
    }

  stages {
    stage('build') {
        environment {
            version = sh(returnStdout: true, script: """echo $gitlabSourceBranch|awk -F '/' '{print \$3}' """).trim()
            }
        steps {
            container('docker-dind'){
            retry(3){
                git credentialsId: "${git_credential}", url: 'http://advgitlab.eastasia.cloudapp.azure.com/SRE/CI-Demo.git'
                }
            retry(3){    
                sh """docker build -t $harbor_url/$harbor_project/helloworld:$version --build-arg VERSION=$version \
                    --build-arg MINIO_URL=$minio_url --build-arg MINIO_ACCESS_KEY=$minio_access_key --build-arg MINIO_SECRET_KEY=$minio_secret_key \
                    --build-arg MINIO_BUCKET=$minio_bucket . """
                sh 'docker login $harbor_url -u $harbor_username -p $harbor_password'
                sh 'docker push $harbor_url/$harbor_project/helloworld:$version'
                    }
                }
            }
        }
    }
}

需要修改demo中helloworld为项目名即可

触发CI

  1. 在gitlab创建新的tag
  2. 在commit中查看pipeline执行情况