自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

这篇具有很好参考价值的文章主要介绍了自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 概述

项目前期部署都是手动部署,所以相关工具基本都已经安装,主要使用的工具有:

使用Gitlab管理代码
使用Maven打包
使用Docker构建镜像(已经有相关的DockerFile文件)
在阿里云kubernetes上部署。

所以,在这次自动化部署过程中,需要做的是安装Jenkins并完成相关配置,然后通过流水线脚本(Pipeline Script)将整个部署过程粘合起来。

因此本文不涉及Maven和Docker等工具的安装部署,仅记录部署过程中Jenkins相关配置和流水线脚本设计。

2 部署Jenkins

1)安装包下载:Jenkins下载地址:Download | Jenkins
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
2)将文件上传到安装目录下,然后路径切换到该目录下,进行安装

rpm -ivh jenkins-2.386-1.1.noarch.rpm

3)在/etc/init.d/jenkins文件中配置JDK信息,保证有 $JAVA_HOME/bin/java信息即可自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

3)启动程序

systemctl start Jenkins

注意:Jenkins默认的端口是8080,如果存在端口冲突,可以在启动前修改 /etc/sysconfig/jenkins文件中JENKINS_PORT信息
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

4)在浏览器中访问,可以正常打开即部署成功。然后通过提示信息,查看初始密码,复制进去即可登录,然后选择安装推荐插件,或者自定义要安装的插件,或者直接跳过插件安装均可。本次安装采用的是安装推荐插件。

其他说明:

  • 注意根据不同的系统下载不同的版本,Linux版本查看和版本关系可网上搜索
  • 部署Jenkins也可以通过Docker方式,但在 RedHat 系列(RHEL、CentOS、Fedora 等)的 Linux 通过Docker部署Jenkins后,在Jenkins脚本中运行 docker命令时会因为 SELinux 而报错 docker: not found(有资料说可以通过安装selinux-dockersock 【GitLab地址】解决,但是我安装后还是报错,因此就放弃了使用docker部署Jenkins)。另外使用Docker部署Jenkins,因为容器内无法直接访问本机的资源,需要提前规划好资源挂载,然后在Docker中做好环境变量配置,或者在Docker容器内重新部署新的工具,如Maven。总之使用Docker部署Jenkins会遇到较多问题,建议对Docker不熟悉的话,不要使用Docker进行部署。
  • 在部署完成后,启动Jenkins后没有找到初始密码文件,于是把Jenkins卸载后,重新进行了部署。【可参考文章】。
  • 本文的部署过程较为简略,不同的环境部署中可能会遇到不同的问题,可以通过查阅其他的资料解决。【可参考文章】

3 配置Jenkins

3.1 配置Gitlab的免密访问

1. 首先在Jenkins部署的服务器上生成密钥:
因为jenkins是使用jenkins用户运行的,使用root用户生成ssh密钥的话会可能会导致Jenkins没有访问权限导致出现 stderr: Host key verification failed的问题,所以先切换到jenkins用户下,生成ssh密钥

su -s /bin/bash jenkins
ssh-keygen -t rsa

2. 复制生成的公钥到Gitlab
使用命令cat .ssh/id_rsa.pub,查看公钥内容,并将内容复制过去,点击Add key完成新增。
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
3. 复制私钥到Jenkins
使用命令cat .ssh/id_rsa,查看私钥内容,并将内容复制到Jenkins的凭据中,见下图。注意复制私钥的内容要完整,需要包含前后-------的两行内容
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

ID可手动填写,也可不填写,不填写时系统会自动生成。
Username即凭据名称,可手动填写,也可不填写,系统默认是登录用户名。

4. 以上配置完成后,还需要一个步骤,避免Jenkins第一次访问Gitlab失败。这里有2个方法可以,选择其一即可。

  • 第一个方法:
    在linux上手动访问一下Gitlab,使用命令见下
git ls-remote -h git@####.git HEAD

注意:git@####.git为自己仓库地址,第一次运行时提示yes/no 输入yes即可*

  • 第二个方法:

修改Jenkins的安全配置,在Manage Jenkins >> Configure Global Security 找到Git Host Key Verification Configuration,修改为No verification。保存
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

3.2 配置对阿里云k8s的访问

1. 登录阿里云,打开对应集群详情页面,切到【连接信息】,复制凭证信息。在本地新建一个空txt文件,粘贴进去,保存,修改文件名称为kubectl.conf。
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
2. 在Jenkins中配置凭证。选择上传刚才的kubectl.conf文件,ID这里自定义了一个名称。
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

3.3 添加Jenkins全局变量

1. 添加JAVA_HOME
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

2. 添加M2_HOME
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
3. 添加PATH+EXTRA
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

3.4 全局工具配置Maven

使用指定的settings.xml文件
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

4 创建Job和编写脚本

4.1 创建Job

新建任务-填写任务名称,选择流水线-点击确认
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

4.2 编写脚本

1)脚本框架构建

根据当前项目部署过程,先把脚本基本框架写好。每一个具体的项目可能不一样,根据实际的情况写。

pipeline {

	agent any

	stages {
		stage('0.前置构建'){
			steps {
				script{
					echo "前置构建"
				}
			}	
		}
			
		stage('1.拉取代码'){
			steps {
				sh """
					echo "拉取代码"
				"""			
			}
		}
		
		stage('2.编译程序'){
			steps {
				sh """
					echo "编译程序"
				"""
			}      
		}
		
		stage('3.镜像打包上传'){
			steps {
				script{
					sh """
						echo "镜像打包上传"
					"""
				}
			}
		}
		
		stage('4.发布'){
			steps {
				script{
					sh """
						echo "部署程序"
					"""
				}			
			}
		}
	}			
}
2)前置工作

一般项目设计合理,从拉取代码开始就可以了,我们的这个项目因为一些原因,需要有一个前置构建,但是又不是每一次都是必须的,这里需要添加一个参数,进行控制,另外前置构建,需要另建一个Job,完成拉取和编译代码工作。这里前置构建我起名叫pre-build,依然采用流水线方式构建。脚本结构如下:

pipeline {

    agent any

    stages {
		
        stage('1.拉取代码'){
            steps {
                cleanWs()
				checkout scmGit(branches: [[name: '*/master']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'parentProject']], userRemoteConfigs: [[credentialsId: 'Gitlab', url: 'git@git.***.com.cn:test/parentProject.git']])
				checkout scmGit(branches: [[name: '*/dev']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'childProject1']], userRemoteConfigs: [[credentialsId: 'Gitlab', url: 'git@git.***.com.cn:test/childProject1.git']])							
            }
        }
			
		stage('2.编译程序'){
            steps {
				sh """
					cd ${WORKSPACE}/parentProject/
                    mvn clean install
                """
            }      
        }
    }
}

执行一下构建,成功。
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

3)stage0中配置的参数

返回当前Job的配置页面,完成stage0的配置项,首选勾选【参数化构建】,选择布尔值参数,然后填写名称,勾选指定默认值,并进行友好的描述说明,保存。
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

4)完善stage0的脚本
pipeline {

    agent any
	
	parameters {
        booleanParam(name:"pre-build", defaultValue:"true", description:"是否进行前置构建:勾选为是,不勾选为否,默认为是")
    }
		
	stages {
		stage('0.前置构建'){
			steps {
				script{
					if (pre-build){
						build job: "pre-build"
					}
				}	
			}	
		}
				
		stage('1.拉取代码'){
			steps {
				sh """
					echo "拉取代码"
				"""			
			}
		}
			
		stage('2.编译程序'){
			steps {
				sh """
					echo "编译程序"
				"""
			}      
		}
			
		stage('3.镜像打包上传'){
			steps {
				script{
					sh """
						echo "镜像打包上传"
					"""
				}
			}
		}
		
		stage('4.发布'){
			steps {
				script{
					sh """
						echo "部署程序"
					"""
				}			
			}
		}
	}			
}

构建一下,成功。

5)完善stage1的脚本

首先是清空工作空间,然后拉取代码

stage('1.拉取代码'){
	steps {
		cleanWs()
		checkout scmGit(branches: [[name: '*/dev']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'childProject3']], userRemoteConfigs: [[credentialsId: 'Gitlab', url: 'git@git.***.com.cn:test/childProject3.git']])
	}
}

构建一下,成功。

6)完善stage2的脚本

进行编译打包。

stage('2.编译程序'){
	steps {
		sh '''
			cd ${WORKSPACE}/childProject3/
			mvn clean install
		'''
	}      
}
7)完善stage3的脚本。
stage('3.镜像打包上传'){
	steps {
		script{
			DateTime=sh(returnStdout: true, script: 'date "+%Y%m%d%H%M"').trim()
			sh """
				chmod 777 ${WORKSPACE}/childProject3/*
				./buildAndPush.sh dokerfileName tagName-${DateTime}
			"""
		}
	}
}

其中buildAndPush.sh完成Docker构建和镜像推送,文件内容为

# bulid和push

docker build -f Dockerfile-$1 -t $1:$2 .

docker login -u 'robot' -p 'hjsafhjjjdkk' http://harbor.***.com.cn
docker tag $1:$2 harbor.***.com.cn/test/$1:$2
docker push harbor.***.com.cn/test/$1:$2

# 清理本地镜像
docker rmi $1:$2
docker rmi harbor.***.com.cn/test/$1:$2

因为本项目之前已经存在脚本和Dockerfile,所以直接沿用了,其他项目中,如果可以直接使用命令进行镜像打包和上传,可采用如下命令:

docker  build   -t  harbor***.com.cn/test/imageName: tagName-${DateTime} .  && docker push  harbor.***.com.cn/test/ imageName: tagName-${DateTime}
8)完善stage4的脚本
stage('4.发布'){
	steps {
		script{
			withKubeConfig(caCertificate: '', clusterName: '', contextName: '', credentialsId: 'k8s-config', namespace: 'nameSpaceofchildProject3', restrictKubeConfigAccess: false, serverUrl: 'https://***:6443'){
			sh """
			kubectl set image deployment/childProject3 childProject3=harbor***.com.cn/test/imageName: tagName-${DateTime}  -n nameSpaceofchildProject3
			kubectl rollout status deployment/childProject3 -n nameSpaceofchildProject3
			"""
			}			
		}
	}
}

脚本中的 nameSpaceofchildProject3 可以从阿里云上【集群列表】-【应用管理】,搜索相呼应的名称,查看命名空间
自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)

4.3 优化脚本

通过添加一些参数,把脚本变得更为通用一些,可以更为方便的复用到其他工程上。如

String server_name= env.JOB_NAME.toLowerCase()
String dockerbuild_filename = "###"
String tag_name = "###"

可根据项目的实际情况进行设置。文章来源地址https://www.toymoban.com/news/detail-448520.html

到了这里,关于自动化部署实践 (Jenkins+Git+Docker+阿里云k8s)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker+jenkins自动化部署springboot项目

    阿里云服务器1核2GB java 1.8.0._371 maven apache-maven3.8.8 git 1.8.3.1 docker和jenkins在一台服务器上,环境的配置,对于java和maven可以自己下载对应tar包进行配置,记得配置环境,也可以使用yum进行安装。记得配置/etc/profile后source一下: source /etc/profile Maven记得修改镜像!!! 在本地创建

    2024年02月03日
    浏览(48)
  • Docker + Jenkins 自动化部署若依项目

    前言 对着此文章操作之前,确保服务器上的Java环境(JDK、MySQL、Redis、Jenkins以及Linux安装Maven)已经装好,如果没有装好,参考我之前的文章。 注意: 如果服务器上自己装的又 Nginx ,需要手动停了,要不会导致80端口被占用 1:首先,到若依官网拉去若依分离版项目 2:拉完之后

    2024年04月16日
    浏览(48)
  • Docker + Jenkins + Nginx实现前端自动化部署

    文章有点长,如果你是以学习的态度来看这篇文章,建议收藏起来慢慢看。 前端自动化部署一直以来概念很清楚知道怎么回事,但是其中怎么操作没怎么研究过,虽然之前环境都搭起来了,但是也只是Jenkins构建项目成功,比如提交代码之后怎么触发自动构建,打包后的文件

    2024年02月05日
    浏览(49)
  • Jenkins+Docker+Gitee搭建自动化部署平台

    目录 服务器准备 Docker安装 yum 包更新到最新 设置yum源 安装docker 启动和开机启动 验证安装是否成功 Jenkins安装 拉取镜像 创建映射目录 运行镜像 运行出错 修正权限 重新运行镜像 新建安全组,放通8080端口 激活Jenkins Jenkins插件 Jenkins全局工具配置 自动构建Springboot项目 准备好

    2024年02月04日
    浏览(57)
  • Docker 自动化部署(实践)

    docker search jenkins查看需要的jenkins镜像源 docker pull jenkins/jenkins 拉取jenkins镜像 docker images查看下载的镜像源 docker ps 查看包含启动以及未启动的容器 docker ps -a查看启动的容器 docker rm 容器id/容器名称 删除容器 docker rm -f 容器id/容器名称 删除容器(强制删除容器,运行状态也删除

    2024年02月07日
    浏览(47)
  • Docker+Jenkins+Gitee自动化部署maven项目

    各位看官老爷,本文为Jenkins实战,注重实际过程,阅读完会有以下收获: 了解如何使用Docker安装Jenkins 了解如何使用Jenkins部署maven项目 了解如何使用Jenkins+Gitee实现自动化部署 相信,正在读这篇文章的你,对Jenkins应该有或多或少的了解,就算没有也应该在某个地方听说过。👍

    2024年02月07日
    浏览(234)
  • Gitlab + Docker + Jenkins + Harbor实现自动化部署

    目录 文章目录 前言 一、第一台服务器--Jenkins 1、安装前 2、安装Jenkins 3、修改正在跑容器的端口 4、Jenkins内部插件和配置  二、第二台服务器--Harbor 1、安装docker-compose 2.安装及配置 3、卸载Harbor  4、Harbor启动后操作 三、第三台服务器--生产环境  1、配置私服地址 四、Jenkin

    2024年02月14日
    浏览(58)
  • jenkins+docker实现可持续自动化部署springboot项目

    目录 一、前言 二、微服务带来的挑战 2.1 微服务有哪些问题

    2024年04月15日
    浏览(81)
  • Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署

    前言 🚀 需提前安装环境及知识点: 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 🚀 目的: 将我们的前端项目打包成一个镜像容器并自动发布部署,可供随时pull访问 1、在当前项目的根目录创建Dockerfile文件并写入如下代码: 代码片段详细描述: 注意

    2024年02月05日
    浏览(74)
  • Jenkins + Docker 一键自动化部署 SpringBoot 应用最精简流程

    本文章实现最简单全面的 Jenkins + Docker + Spring Boot 一键自动部署项目。步骤齐全,少走坑路。 环境:CentOS7 + Git (Gitee) 实现步骤:在 Docker 安装 Jenkins,配置 Jenkins 基本信息,利用 Dockerfile 和 Shell 脚本实现项目自动拉取打包并运行。 1安装 Docker 安装社区版本 Docker CE 确保 yum 包

    2024年04月26日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包