项目开发之Jenkins

文章目录

思考

java 复制代码
jenkis怎么连接github仓库?
jenkis的作用是什么?

基础

概述

java 复制代码
定义:
	Jenkins是一款开源的持续集成(Continuous Integration,CI)、持续部署(Continuous Deployment, CD)、持续交付(Continuous Delivery, CD)的工具,广泛用于项目开发,能提供自动构建,测试,部署等功能。
	持续集成 = 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。持续部署 = 部署到测试环境、预生产环境/灰度环境、生产环境。持续交付 = 将最终产品发布到生产环境、给用户使用。
使用场景:
	云原生开发、测试开发、敏捷开发、运维开发;	

🍎Jenkins结合开发流程:

Jenkins+Maven+Git集成开发部署

java 复制代码
本地测试运行:所需三个服务;
	Jenkins-GitLab-ssh = Git/Svn服务器
	Jenkins-Server服务 = 包含:Maven、JDK
	TestServer服务 = 包含:JDK
开发提交集成全流程:
	idea提交到Github;Jenkins页面运行项目分支;

GitLab服务

java 复制代码
网站:
	官方网站:https://apout.gitlab.com
	https://docs.gitlab.cn/ih/install/requirements.html
	官方安装文档:https://gitlab.cn/install/?version=ce
java 复制代码
参考:
	https://developer.aliyun.com/article/892646 (docker desktop安装)

实战

1 新建任务需要的配置pipeline

该代码是Jenkinsfile,用于定义一个持续集成/持续交付(CI/CD)的流水线;

javascript 复制代码
pipeline {
    agent any
    // 表示该流水线可以在任何可用的Jenkins节点上执行;
    
    // 定义变量
    // JOB_NAME  任务名称,对应容器服务名,例如:market_ods/mms_api
    // RegistryUrl 在全局环境变量中配置
    // ImageVer 容器版本,格式yyyyMMddHHmm,插件 Timestamp
    // 
    // 创建访问Git全局凭据, credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930'
    // 创建访问私有镜像仓库全局凭据, credentialsId: 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179'

    environment { // 定义环境变量
        PLAT="as"    // 定义平台
        PROJECT="jenkins_xxx"    // 定义项目程序
        PROJECT_GIT="project_xxx"    // 定义项目程序
        GIT_URL="http://gitlab地址/${PROJECT_GIT}.git" // git仓库链接
        JAVA_HOME="/usr/local/jdk1.8.0_361"
        MAVEN_HOME="/usr/local/maven3.6"
                PATH="$MAVEN_HOME/bin:$PATH"
    }
    options{ 
        // 插件:Build Timestamp 
        timestamps() // 用于在构建日志中添加时间戳;
    }
    parameters {
        // 插件:Git Parameter  http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
        gitParameter (name: 'Git_Branch', defaultValue: 'master', type: 'PT_BRANCH', useRepository: env.GIT_URL, description: '请选择项目GIT分支', branchFilter: 'origin/(.*)', branch:'', quickFilterEnabled: true, selectedValue: 'TOP', sortMode: 'NONE', tagFilter: '*')
        // 构建Git_Rranch,用户可以在构建时选择不同的Git分支。
    } 
    stages { // 定义流水线的各个阶段;
        stage('脚本执行环境'){
            steps {
                sh """
                    echo "$JAVA_HOME"
                    java --version
                    mvn --version
                    git version
                    docker -v
                """
                script {
                    buildName "#${BUILD_NUMBER} ${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}"
                }
            }
        }
        // 删除当前目录(${WORKSPACE})下内容,通常用在构建完毕之后清空工作空间
        stage('Delete Workspace') { 
            steps {
                echo "清理工作目录: ${WORKSPACE}"
                deleteDir()
            }
        }
        // 拉取代码 http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
        stage('Checkout') {      
            steps {
                checkout([$class: 'GitSCM', 
                    branches: [[name: "${params.Git_Branch}"]],
                    userRemoteConfigs: [[credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930', url: env.GIT_URL]],
                    submoduleCfg: [], 
                    doGenerateSubmoduleConfigurations: false, 
                    extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]]
                ])
            }
        }
        // mvn打包
        stage('Packaging project') {        
            steps {
                script {
                    sh 'mvn clean install'
                }
            }
        }
        //构建并推送镜像
        stage('Build & Push Image to nexus') {
            steps {
                script {
                     // 第一个参数是私有仓库地址,注意要带http(s),第二个参数是账号密码登录凭证,需要提前创建
                    docker.withRegistry("https://${RegistryUrl}", 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179') {
                        def image = docker.build("${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}", "${WORKSPACE}")
                        image.push()
                    }
                }
            }
        }
        stage('Deploy to the Target server') {
            steps {
                echo '部署到目标服务器'
                withCredentials([file(credentialsId: 'k8s_config', variable: 'KUBECONFIG')]) {
                    sh 'kubectl set image deployment/${PROJECT} ${PROJECT}=${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer} -ndev'

                }
            }
        }
    }
}

最后

相关推荐
来鸟 鸣间3 分钟前
linux下ffmpeg源码编译
linux·运维·ffmpeg
赛博云推-Twitter热门霸屏工具7 分钟前
Twitter 自动化与热门霸屏实战:以赛博云推为例的技术解析
运维·自动化·twitter
菜鸟程序猿小章10 分钟前
人大金仓服务器定时备份
运维·服务器
zt1985q15 分钟前
本地部署静态网站生成工具 Vuepress 并实现外部访问
运维·服务器·网络·数据库·网络协议
楼田莉子19 分钟前
Linux学习:进程信号
linux·运维·服务器·c++·学习
kabcko23 分钟前
Windows10安装Docker
运维·docker·容器
看世界的小gui30 分钟前
Jenkins通过CAS接入Maxkey单点登陆
运维·jenkins
软件资深者32 分钟前
免费的2026网刻工具, 轻松解决局域网电脑批量还原问题
运维·服务器·负载均衡
A-刘晨阳36 分钟前
K8S 部署 CoreDNS 之 DNS 域名获取
运维·云原生·容器·kubernetes·dns·coredns
爱内卷的学霸一枚41 分钟前
现代DevOps实践:从CI/CD到GitOps的深度技术解析
运维·ci/cd·devops