文章目录
- 思考
- 基础
- 概述
- Jenkins+Maven+Git集成开发部署
- GitLab服务安装
- 实战
- 1 新建任务需要的配置pipeline
- 最后
思考
jenkis怎么连接github仓库?
jenkis的作用是什么?
基础
概述
定义:
Jenkins是一款开源的持续集成(Continuous Integration,CI)、持续部署(Continuous Deployment, CD)、持续交付(Continuous Delivery, CD)的工具,广泛用于项目开发,能提供自动构建,测试,部署等功能。
持续集成 = 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。持续部署 = 部署到测试环境、预生产环境/灰度环境、生产环境。持续交付 = 将最终产品发布到生产环境、给用户使用。
使用场景:
云原生开发、测试开发、敏捷开发、运维开发;
🍎Jenkins结合开发流程:
Jenkins+Maven+Git集成开发部署
本地测试运行:所需三个服务;
Jenkins-GitLab-ssh = Git/Svn服务器
Jenkins-Server服务 = 包含:Maven、JDK
TestServer服务 = 包含:JDK
开发提交集成全流程:
idea提交到Github;Jenkins页面运行项目分支;
GitLab服务安装
网站:
官方网站:https://apout.gitlab.com 很多文档
https://docs.gitlab.cn/ih/install/requirements.html
官方安装文档:https://gitlab.cn/install/?version=ce
准备:
VMware虚拟机环境下安装:
准备虚拟机VMware;使用mini版;且不需要额外的可视化界面;
通过Xshell实现命令行安装;
极狐Github;
Docker环境下安装:
https://developer.aliyun.com/article/892646 (docker desktop安装)
实战
1 新建任务需要的配置pipeline
该代码是Jenkinsfile,用于定义一个持续集成/持续交付(CI/CD)的流水线;
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'
}
}
}
}
}