Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)
一、说明
1)需求:
Rancher 上部署 Jenkins-master,服务采用 Jenkins-slave 发布,发布完成后 Jenkins-slave 自动销毁。
2)环境:
Rancher 2.2.7 (部署Rancher参考之前文章:离线安装 Rancher2.2.4 HA 集群)
Jenkins 2.176.2
二、安装 Jenkins
2.1 安装 Jenkins
在 Rancher 2 上部署 Jenkins-master
1)添加工作负载
名称:jenkins-master
Docker镜像:jenkins/jenkins:lts
命名空间:jenkins
数据卷:jenkins-master-pvc,容器路径:/var/jenkins_home


2)添加负载均衡
名称:jenkins-master
命名空间:jenkins
自定义域名:jenkinscicd.xxxxxx.com
服务/工作负载:jenkins-master
容器端口:

3)添加域名解析
jenkinscicd.xxxxxx.com 172.16.5.84(ingress lb 地址)
dig查看是否解析成功
dig jenkinscicd.xxxxxx.com
4)访问
、浏览器访问连接:jenkinscicd.xxxxxx.com 、在rancher上进入容器,查看密码
cat /var/jenkins_home/secrets/initialAdminPassword 、验证后选择安装推荐的插件 、重启jenkins
2.2 安装插件
Manage Jenkins -> Manage Plugins 安装 Kubernetes 和 Kubernetes Cli 插件
Kubernetes
Kubernetes Cli
说明:Kubernetes插件是可以增加Kubernetes云,Kubernetes Cli插件是用于jenkinsfile中kubectl容器可以使用withKubeConfig参数
2.3 添加凭据
添加4个全局凭据
)docker-registry:gitlab 镜像仓库凭据(类型:Username with password)
)gitlab:gitlab 凭据(类型:Username with password)
)kube:develop 集群的凭据(类型:Secret text)
)cicdkube:jenkins 所在k8s集群的凭据(类型:Secret text)
其中 kube 和 cicdkube 的Secret 为 rancher 对应的集群配置文件中的 token 值。

2.4 配置kubernetes云
系统设置,增加一个云(kubernetes)
1)名称:kubernetes
2)Kubernetes 地址:https://kubernetes.default
3)Kubernetes 命名空间:jenkins
4)凭据:cicd-kube (之前创建的cicdkube凭据,用于连接jenkins-master所在的集群)
5)Jenkins 地址:http://jenkins-master:8080
三、提交jenkinsfile文件
3.1 编写 yaml 文件
把 KubernetesPod.yaml 文件放在代码库根目录,内容如下:
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: jnlp
env:
- name: CONTAINER_ENV_VAR
value: jnlp
resources:
limits:
cpu:
memory: 1Gi
requests:
cpu:
memory: 1Gi
- name: maven
image: maven:3.6-alpine
command:
- cat
tty: true
env:
- name: CONTAINER_ENV_VAR
value: maven
volumeMounts:
- name: repo-maven-cache
mountPath: /root/.m2
- name: kubectl
image: cnych/kubectl
command:
- cat
tty: true
env:
- name: CONTAINER_ENV_VAR
value: kubectl
- name: docker
image: docker
command:
- cat
tty: true
env:
- name: CONTAINER_ENV_VAR
value: docker
volumeMounts:
- name: repo-docker-sock
mountPath: /var/run/docker.sock
volumes:
- name: repo-maven-cache
persistentVolumeClaim:
claimName: pvc-jenkins-maven-cache
- name: repo-docker-sock
hostPath:
path: /var/run/docker.sock
3.2 编写 jenkinsfile
把 Jenkinsfile 文件也放在代码库根目录,内容如下:
pipeline {
environment {
IMAGE_TAG = sh (returnStdout: true, script: 'echo "build-${BRANCH_NAME//\\//_}-$BUILD_NUMBER"').trim()
}
agent {
kubernetes {
defaultContainer 'maven'
yamlFile 'KubernetesPod.yaml'
}
}
stages {
stage('Run maven') {
steps {
container('maven') {
echo "代码编译打包"
sh 'mvn clean install'
}
}
}
stage('Build image') {
steps {
container('docker') {
script {
echo "构建Docker镜像"
def image = docker.build("reg.nexus.wmqhealth.com/tools/cicd-test:" + "$IMAGE_TAG", ".")
withDockerRegistry([credentialsId:'docker-registry', url:"https://reg.nexus.wmqhealth.com"]){
image.push()
}
}
}
}
}
stage('Deploy') {
steps {
container('kubectl') {
script {
echo "部署项目"
withKubeConfig(clusterName: 'develop', contextName: 'develop', credentialsId: 'kube', namespace: 'cicdtest', serverUrl: 'https://rancher.wmqhealth.com/k8s/clusters/c-xg99q') {
sh 'kubectl set image deployment/cicd-test cicd-test=reg.nexus.wmqhealth.com/tools/cicd-test:$IMAGE_TAG --namespace cicdtest'
}
}
}
}
}
}
}
四、构建项目
4.1新建jenkins项目

Property strategy:所有的分支获取同样的属性 -> Add property:不通过SCM自动化触发 (以免一进行扫描分支就进行构建项目)。

其他的默认即可,最后保存。
4.2 新建rancher项目
1)创建命名空间
在 develop 集群创建 cicdtest 命名空间
2)创建工作负载
名称和命名空间与jenkinsfile中定义保持一致。镜像随便写一个不存在的,部署pods数为0

4.3 构建
在jenkins 中点击构建
1、在jenkins所在的集群会动态生成 jenkins-slave pod

2、会打包上传镜像,并会更新develop集群中cicd-test的镜像信息

3、构建成功后,手动把pod数增加到1,这样项目就构建完成了。

Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)的更多相关文章
- Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)
一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...
- CI/CD自动化发版系统设计简介
转载自:https://www.cnblogs.com/wellful/archive/2004/01/13/10604151.html 版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不 ...
- Jenkins CI&CD 自动化发布项目实战(下篇)
Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Jenkins CI&CD 自动化发布项目实战(上篇)
Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Jenkins+GitLab+SonnarQube搭建CI/CD全流程
1. CI/CD 1.1 CI - 持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干.持续集成的目的就是让产品可以快速迭 ...
- GitLab CI/CD 自动化部署入门
前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正. 入门 初始化 cp: 无法获取'/root/node-v12.9.0-linux-x ...
- 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法
至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...
- 【Devops】【docker】【CI/CD】2.docker启动jenkins环境+安装必要的插件
[注意:]jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问题!!! ================ ...
- 【Devops】【docker】【CI/CD】docker启动的Jenkins容器 - 系统管理 - 全局工具配置 - 自动安装JDK、Maven、Git、Docker
本篇适用于jenkins是启动的docker容器,自动安装JDK Maven Git Docker等全局工具 ========================================= ...
随机推荐
- 图层树右键菜单结合Command操作过程
图层树右键菜单结合Command操作过程 根据老师线上培训图层树右键菜单的生成,添加contextMenuStrip后再依次添加.命名ToolStripMenuItem,若将全部‘项’添加C ...
- Vue-Cli 3.x 创建的项目中对 import 引入的 CSS 样式启用 autoprefixer
问题描述: Vue-Cli 3.x 默认开启了 autoprefixer,但对于在 main.js 中通过 import 引入的 CSS 并没有自动添加前缀 分析原因: autoprefixer 在项 ...
- Linux进程管理之ps
Linux 是一种动态系统,能够适应不断变化的计算需求.下面介绍一些 Linux 所提供的工具来进行进程的查看与控制,掌握这些让我们能在某些进程出现异常的时候及时查看相关的指标,从而解决问题. 进程管 ...
- 'root'@'localhost'不能登录问题
鉴于我在遇到这个问题时,在网上搜索到几十个答案都是进行更改密码解决该问题,然并没有卵用.最后还是让小编找到了解决方法,希望大家遇到该问题时能够节省时间.解决方法如下: #mysql -u root ...
- React源码 ReactDOM.render
在 react 当中,主要创建更新的有三种方式 1.ReactDOM.render || hydrate 这两个api都是要把这个应用第一次渲染到我们页面上面,展现出来整个应用的样子的过程,这就是初 ...
- python 和 R 语言中的等差数列
等差数列的通项公式:an = a0 + n*d. 数学上 n 是可以取遍整个整个正整数集的,在现实中,n 是有范围的. 1.R 语言用 seq() 函数产生等差数列: 2.python 中 ran ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第四周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- contact form 7如何搭配Akismet过滤垃圾邮件
contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...
- js语法中一些容易被忽略,但会造成严重后果的细节
一.复杂数据类型-“对象”的地址引用方式,不理解清楚,会出大乱子 复习一下基础概念(老司机略过): JS的数据可以分为简单类型(数字.字符串.布尔值.null和undefined)和 复杂数据类型(对 ...
- java 补充(final、static)
final 固定的 final 修饰类的时候,只能作为子类继承,不能作为父类. final 定义变量时,必须给成员变量赋值.------ 1.直接赋值 2.构造方法. final 修饰成员方法时 ...