Kubernetes 的CI流程方案
流程架构图
依赖:
- Jenkins
- Gitlab
- Docker
- Harbor
- Helm chart
- Minio(blob)
Jenkins 配置
-
下载安装 gitlab 插件 GitLab Plugin
-
配置参数
参数包括: minio_url,minio_access_key,minio_secret_key,minio_bucket,harbor_url,harbor_username,harbor_password,harbor_project
Gitlab 配置
配置 Webhook
Gitlab Code 结构
编写 Dockerfile
- 在项目根目录创建 Dockerfile 文件
- 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为项目名即可