jenkins利用pipeline构建K8S应用-示例(一)

nodejs前端项目

Jenkins全局传参配置

  • pipeline配置(根据k8s的yaml进行配置)
podTemplate(label: 'jnlp-slave', cloud: 'kubernetes')
{
    node ('jnlp-slave') {
        stage('git-npm') {
            sh '''
            mkdir -p /root/.ssh
            cp -r /kubectl/.ssh/id_rsa /root/.ssh/
            chmod 0600 /root/.ssh/id_rsa
            echo "StrictHostKeyChecking no">>/etc/ssh/ssh_config
            echo "UserKnownHostsFile /dev/null" >>/etc/ssh/ssh_config
            git clone -b $branch $gitURL
            cd $PROJECT_NAME
            npm install
            npm run build
            '''
        }
        stage('docker_build') {
       withCredentials([usernamePassword(credentialsId: '074faeca-f34f-43ba-9807-b988044123c5', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
         sh "docker login hub.kce.ksyun.com -u $USERNAME -p $PASSWORD"
        }

            sh '''
            cd $PROJECT_NAME
            tar zcvf dist.tar.gz dist
            cd kubernetes
            mv ../dist.tar.gz ./
            TAG=$(date +%y%m%d%H%M)
            docker build -t $DOCKER_IMG/${PROJECT_NAME}:$TAG -f Dockerfile .
            docker push $DOCKER_IMG/${PROJECT_NAME}:$TAG
            echo "y"| docker system prune -a
            echo "推送镜像到金山云仓库成功"

            echo "开始development"

            if [ $ENV = pre ];
            then
                cp -r /kubectl/pre/.kube /root/
                echo "is pre"
            else
                echo "RUN DOCKER FAIL"
            fi

            cp /kubectl/kubectl /usr/local/bin/
            mkdir -p yaml
            cp -r /kubectl/pre/nodejs/projec.yaml ./yaml/
            cp -rf /kubectl/pre/service/service.yaml ./yaml/
            sed -i "s#IMG_NAME:IMG_TAG#${DOCKER_IMG}/${PROJECT_NAME}:$TAG#g" yaml/*
            sed -i "s#project_name#${PROJECT_NAME_PRE}#g" yaml/*
            sed -i "s#_port_#${PORT}#g" yaml/*
            number=$(kubectl get pods -n default | awk '{print $1}' | grep ${PROJECT_NAME_PRE}|wc -l)
            if [ $number != 0 ];then kubectl delete -f ./yaml && kubectl create -f ./yaml ;else kubectl create -f ./yaml ;fi
            sleep 10s
            kubectl get all -n default | grep ${PROJECT_NAME_PRE}
            '''
        }
    }
}
  • pipeline (利用kubectl set 命令直接修改镜像版本)
podTemplate(label: 'jnlp-slave', cloud: 'kubernetes')
{
    node ('jnlp-slave') {
        stage('git-npm') {
            sh '''
            mkdir -p /root/.ssh
            cp -r /kubectl/.ssh/id_rsa /root/.ssh/
            chmod 0600 /root/.ssh/id_rsa
            echo "StrictHostKeyChecking no">>/etc/ssh/ssh_config
            echo "UserKnownHostsFile /dev/null" >>/etc/ssh/ssh_config
            git clone -b $branch $gitURL
            cd $PROJECT_NAME
            npm install
            npm run build
            '''
        }
        stage('docker_build') {
       withCredentials([usernamePassword(credentialsId: '074faeca-f34f-43ba-9807-b988044123c5', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
         sh "docker login hub.kce.ksyun.com -u $USERNAME -p $PASSWORD"
        }

            sh '''
            cd $PROJECT_NAME
            tar zcvf dist.tar.gz dist
            cd kubernetes
            mv ../dist.tar.gz ./
            TAG=$(date +%y%m%d%H%M)
            docker build -t $DOCKER_IMG/${PROJECT_NAME}:$TAG -f Dockerfile .
            docker push $DOCKER_IMG/${PROJECT_NAME}:$TAG
            echo "y"| docker system prune -a
            echo "推送镜像到金山云仓库成功"

            echo "开始development"

            if [ $ENV = pre ];
            then
                cp -r /kubectl/pre/.kube /root/
                echo "is pre"
            else
                echo "RUN DOCKER FAIL"
            fi

            cp /kubectl/kubectl /usr/local/bin/
            kubectl set image deployment/${PROJECT_NAME_PRE} -n default ${PROJECT_NAME_PRE}=${DOCKER_IMG}/${PROJECT_NAME}:$TAG
            sleep 10s
            kubectl get all -n default | grep ${PROJECT_NAME_PRE}
            '''
        }
    }
}

Java 后端

Jenkins全局传参配置

  • pipeline(根据k8s的yaml进行配置)
podTemplate(label: 'jnlp-slave', cloud: 'kubernetes')
{
    node ('jnlp-slave') {
        stage('git-maven') {
            sh '''
            export MAVEN_HOME=/maven
            export PATH=$MAVEN_HOME/bin:$PATH
            '''
            sh '''
            mkdir -p /root/.ssh
            cp -r /kubectl/.ssh/id_rsa /root/.ssh/
            chmod 0600 /root/.ssh/id_rsa
            git clone -b $branch $gitURL
            cd $PROJECT_NAME
            /maven/bin/mvn clean install -Dmaven.test.skip=true
            ls *
            '''
        }
        stage('docker_build') {
       withCredentials([usernamePassword(credentialsId: '074faeca-f34f-43ba-9807-b988044123c5', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
         sh "docker login hub.kce.ksyun.com -u $USERNAME -p $PASSWORD"
        }

            sh '''

            cd $PROJECT_NAME
            cd kubernetes
            mv ../aiot-build-device-service/target/aiot-build-device-service-1.0-SNAPSHOT.jar ./
            TAG=$(date +%y%m%d%H%M)
            docker build -t ${PROJECT_NAME}:$TAG .
            docker tag ${PROJECT_NAME}:$TAG $DOCKER_IMG/${PROJECT_NAME}:$TAG
            docker push $DOCKER_IMG/${PROJECT_NAME}:$TAG
            echo "y"| docker system prune -a
            echo "推送镜像到金山云仓库成功"

            echo "开始development"

            if [ $ENV = pre ];
            then
                cp -r /kubectl/pre/.kube /root/
                echo "is pre"
            else
                echo "RUN DOCKER FAIL"
            fi

            cp /kubectl/kubectl /usr/local/bin/
            cp -r /kubectl/yaml ./
            echo "#cp -rf /kubectl/service/service.yaml ./yaml/#"
            sed -i "s#IMG_NAME:IMG_TAG#${DOCKER_IMG}/${PROJECT_NAME}:$TAG#g" yaml/*
            sed -i "s#project_name#${PROJECT_NAME}-pre#g" yaml/*
            sed -i "s#_port_#${PORT}#g" yaml/*
            sed -i "s#ENV#$ENV#g" yaml/*
            number=$(kubectl get pods -n default | awk '{print $1}' | grep ${PROJECT_NAME}|wc -l)
            if [ $number != 0 ];then kubectl delete -f ./yaml && kubectl create -f ./yaml ;else kubectl create -f ./yaml ;fi
            sleep 60s
            kubectl get all -n default | grep ${PROJECT_NAME}
            '''
        }
    }
}
  • pipeline(根据k8s的kubectl进行配置)
podTemplate(label: 'jnlp-slave', cloud: 'kubernetes')
{
    node ('jnlp-slave') {
        stage('git-maven') {
            sh '''
            export MAVEN_HOME=/maven
            export PATH=$MAVEN_HOME/bin:$PATH
            '''
            sh '''
            mkdir -p /root/.ssh
            cp -r /kubectl/.ssh/id_rsa /root/.ssh/
            chmod 0600 /root/.ssh/id_rsa
            git clone -b $branch $gitURL
            cd $PROJECT_NAME
            /maven/bin/mvn clean install -Dmaven.test.skip=true
            ls *
            '''
        }
        stage('docker_build') {
       withCredentials([usernamePassword(credentialsId: '074faeca-f34f-43ba-9807-b988044123c5', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
         sh "docker login hub.kce.ksyun.com -u $USERNAME -p $PASSWORD"
        }

            sh '''

            cd $PROJECT_NAME
            cd kubernetes
            mv ../aiot-build-device-service/target/aiot-build-device-service-1.0-SNAPSHOT.jar ./
            TAG=$(date +%y%m%d%H%M)
            docker build -t $DOCKER_IMG/${PROJECT_NAME}:$TAG .
            docker push $DOCKER_IMG/${PROJECT_NAME}:$TAG
            echo "y"| docker system prune -a
            echo "推送镜像到金山云仓库成功"

            echo "开始development"

            if [ $ENV = pre ];
            then
                cp -r /kubectl/pre/.kube /root/
                echo "is pre"
            else
                echo "RUN DOCKER FAIL"
            fi

            cp /kubectl/kubectl /usr/local/bin/
            kubectl set image deployment/${PROJECT_NAME_PRE} -n default ${PROJECT_NAME_PRE}=${DOCKER_IMG}/${PROJECT_NAME}:$TAG
            sleep 60s
            kubectl get all -n default | grep ${PROJECT_NAME}
            '''
        }
    }
}

   转载规则


《jenkins利用pipeline构建K8S应用-示例(一)》 helen 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录