实验四:流水线部署 | 学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习实验四:流水线部署

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:实验四:流水线部署】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14610


实验四:流水线部署

一、 实验概述

1. 实验简介

本实验通过在 ack 集群上部署 jenkins ,来实现一键式自动拉取 github 仓库上的代码,编译、构建镜像、部署 deployment ,来完成流水线部署的目的。

实验地址:

https://developer.aliyun.com/adc/scenario/exp/cd67aefa9f2d466bb9b6b21716054284

2. 实验资源

本实验涉及的实验资源有三个:ack 托管版集群、ecs 客户端( Linux 系统)和RAM 账号。

3. 实验目的

a. 主要演示如何在阿里云 Kubernetes 服务上快速搭建 Jenkins 持续集成环境;

b. 基于提供的示例快速完成应用源码编译、应用镜像构建、推送以及应用部署的流水线。

4. 实验架构

image.png

注:在多人的情况下,需要创建多个集群或者多个命名空间,jenkins 部署在每个人自己的命名空间下。

 

二、实验准备

1. 已创建 Kubernetes 集群

2. 一台本地机器(如 centos7.6 的服务器),完成下面的准备步骤:

a. 安装 docker-ce ,用于生成配置文件;本实验提供的 ECS 节点,已经预安装了 docker ,直接使用即可;

b. 安装 kubectl 客户端,

安装步骤:

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

$ chmod 755 kubectl

$ mv kubectl /usr/bin/

$ mkdir /root/.kube

最后,配置 config 文件,参考文档验证 kubectl 功能;

3. 在个人账户上创建容器镜像服务的个人实例(该产品为免费产品):

image.png

创建 gitee 账户, 详见后续实验步骤:“fork https://gitee.com/ahwhya/jenkins-demo.git 这个 demo 项目到自己的 gitee 账号”。

 

三、实验步骤

1. 创建镜像仓库并设置密码

a. 创建镜像仓库

开通容器镜像服务后,再依次创建命名空间和镜像仓库;

image.png 

创建命名空间对应的镜像仓库;

image.png 

这里选择“本地仓库”,然后单击“创建镜像仓库”;

image.png

b. 设置密码

选择“实例列表”—“个人实例”—“访问凭证”, 查看登陆实例用户名:

image.png

“username=” 之后的为用户名,即 DOCKER_USER ,设置的密码,即DOCKER_PASSWORD;

单击“创建固定密码”;

image.png

2. 创建镜像仓库拉取密钥

通过 kubectl 在 kubernetes 集群中创建 Secret,用于集群拉取仓库镜像。

创建拉取仓库镜像的 secret

$ kubectl create secret docker-registry hub-secret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD -n Jenkins

3. Fork demo 项目

fork https://gitee.com/ahwhya/jenkins-demo.git 这个 demo 项目到自己的 gitee  账号,然后配置 gitee 的拉取密钥(如果设置为公开仓库,这里可以不用配置,但默认环境为私有仓库,参考链接),记住私钥文件。

备注:

a. 公钥私钥生成:ssh-keygen -t rsa -C“邮箱地址”;

b. 检验办法 ssh -T git@gitee.com

4. 创建 jenkins 上传拉取仓库镜像的密钥

通过 kubectl 在 kubernetes 集群中创建 Secret,用于 jenkins 上传构建后的镜像。

a. 参考截图给的登陆示例步骤:

$ docker login --username=DOCKER_USER registry.cn-hangzhou.aliyuncs.com

在 kubectl 的终端中输入访问凭证,登陆 Registry 实例,登陆后访问凭证会自动保存在 /root/.docker/config.json 文件中;

b. 执行以下命令创建名为 jenkins-docker-cfg的secret:

$ kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file=/root/.docker/config.json

注:命名空间请指定自己安装 jenkins 的命名空间。

5. 部署 jenkins

a. 登录容器服务管理控制台;

b. 在阿里云应用页签中,选择 ack-jenkins;

c. 单击参数页签;

d. 可以在 AdminPassword 字段,修改并自定义密码,如:Admin@123!;

e. 选择 Kubernetes 集群以及命名空间(请选择自己创建的命名空间),填写发布名称;

image.png

6. 查看 jenkins 资源并设置插件

a. 在容器服务控制台左侧导航栏中,单击集群;

b. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情;

c. 在集群管理页左侧导航栏中,选择服务与路由> 服务;

d. 选择相应的命名空间,然后单击 ack-jenkins-default 服务的外部端点,访问并登录 Jenkins;

e. 在新手入门配置页面,单击安装推荐的插件;

f. 选择“系统管理”—“全局安全配置”—“跨站请求伪造保护”—“勾选启用代理兼容”;

image.png

7. 设置 gitee 代码仓库拉取密钥

添加 gitee 凭据。点击“Dashboard”—“系统管理”—“mangage credentials” —“全局”—“添加凭据”

image.png

“类型”选择“SSH Username with private key”,“ID”和“描述”可以随便填,“Username”请填写执行 ssh-keygen 产生 gitee 的密钥对时操作系统的用户名(填写错误将会导致拉取gitee代码失败),“Private key”填写拉取 gitee 代码的私钥。点击“确定”保存。

8. 配置 slave-node

点击“dashboard”—“系统管理”—“节点管理”—“Configure Clouds”—“Pod Templates”—“Pod Template details”

image.png

“添加卷”—“secret volume”,Secret 名称为之前在k8s集群中创建的 secret:“jenkins-docker-cfg”,挂载路径为:“/root/.docker”,点击“Save”保存。

9. 新建 pipeline 任务

a. 点击“dashboard”—“新建任务”

image.png

设置任务名称,点击“流水线”,然后点击“确定”进入详细的配置页。

b. 在“Gerneral”页签,勾选“参数化构建过程”—“添加参数”—“添加字符参数”,依次填写如下键值对:

image_region:cn-hangzhou,origin_repo:registry.cn-hangzhou.aliyuncs.com/test-xiniao,repo:ack-jenkins-demo,

image_tag:latest,branch:master

image.png

image.png

c. 在“流水线”页签,“定义”选择“Pipeline sript from SCM”, “SCM”选择“Git”,“ Repository URL”填写 gitee 项目地址,“Credentials”选择之前配置好的 gitee 代码仓库拉取密钥,“Branches to build”填写“*/master”,点击“保存”保存配置:

image.png

10. 构建任务

a. 在“Dashboard”页面,选择刚才创建的 pipeline 任务“xiniao-test”,点击右边的构建按钮进行构建;

image.png

查看构建历史,可以查看构建的步骤以及失败的记录;

image.png

在“构建历史”中点击其中一个构建历史进入某次构建的详情页,点击“Console output”可以查看构建日志;

image.png

b. 查看构建完成后在 K8S 集群中创建的应用:

image.png

我们部署了一个简单的演示程序“Jenkins-java-demo”,并且采用 LoadBalancer 的方式暴露服务。现在,我们可以在公网上用 IP 和端口来进行访问。


四、参考文档

1. Jenkinfile 使用说明:

https://www.jenkins.io/zh/doc/book/pipeline/jenkinsfile/

2、Jenkins 流水线部署:

https://help.aliyun.com/document_detail/106712.html

注意事项:若 jenkins 控制台有类似“No valid crumb was included in request for /pluginManager/installPlugins by admin. Returning 403”的报错,可以先在插件管理安装“Strict Crumb Issuer“插件,然后在“全局安全配置”处开启代理兼容模式:

image.png

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
3月前
|
jenkins 持续交付 API
enkins学习笔记之十一:优化Gitlab提交流水线
enkins学习笔记之十一:优化Gitlab提交流水线
enkins学习笔记之十一:优化Gitlab提交流水线
|
3月前
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
3月前
|
数据可视化 安全 测试技术
部署流水线原则与工具设计
部署流水线原则与工具设计
48 1
|
3月前
|
运维 测试技术 持续交付
部署流水线解析
部署流水线解析
38 1
|
4月前
|
JSON JavaScript Serverless
函数计算操作报错合集之流水线部署 serverless 全部失败,该如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
存储 弹性计算 监控
建设云上稳定性问题之为什么要在云效平台创建发布流水线并将源代码编译环节替换为从OSS下载构建部署物
建设云上稳定性问题之为什么要在云效平台创建发布流水线并将源代码编译环节替换为从OSS下载构建部署物
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何去除流水线部署阶段脚本的字符限制
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
存储 缓存 运维
阿里云云效操作报错合集之流水线在部署到函数计算时,出现报错:"ConcurrentUpdateError",该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4月前
|
敏捷开发 Kubernetes 持续交付
阿里云云效产品使用合集之如何将流水线部署到Windows
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。