一、说明

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(一)的更多相关文章

  1. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  2. 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法

    至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...

  3. 【Devops】【docker】【CI/CD】2.docker启动jenkins环境+安装必要的插件

    [注意:]jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问题!!! ================ ...

  4. 【Devops】【docker】【CI/CD】docker启动的Jenkins容器 - 系统管理 - 全局工具配置 - 自动安装JDK、Maven、Git、Docker

    本篇适用于jenkins是启动的docker容器,自动安装JDK  Maven  Git   Docker等全局工具 ========================================= ...

  5. Gitlab Runner实现CI/CD自动化部署asp.net core应用

    环境说明 一台git服务器(192.168.169.7),安装gitlab,docker. 一台web服务器(192.168.169.6),安装git,gitlab runner,docker,dot ...

  6. 配置jenkins slave 问题,ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.

    因为需要需要搭建一套自动化环境的windows电脑作为slave,简单的把原来用来mac上的job配置一模一样的配置了下,运行时遇到如上问题,google半天百思不得其解, 后来尝试把SCM里面的br ...

  7. Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成

    前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...

  8. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作

    一.各个组件的功能描述: Docker 是一个开源的应用容器引擎. Jenkis 是一个开源自动化服务器. (1).负责监控gitlab代码.gitlab中配置文件的变动: (2).负责执行镜像文件的 ...

  9. Serverless 实战 —— Funcraft + OSS + ROS 进行 CI/CD

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

随机推荐

  1. <<< Oracle系统参数命令、服务进程、默认用户

    系统参数命令 1.ALTER SYSTEM SET nls_language=american; //设置环境语言为英文 2.SHOW PARAMETER p_name; //显示系统参数 db_na ...

  2. asp.net type=file在上传图片到服务器

    前台 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> ...

  3. 14-find 查找文件

    find - search for files in a directory hierarchy 查找文件 [语法]: find [选项] [参数] [功能介绍] find命令用来在指定目录下查找文件 ...

  4. square开源vim,tmux配置在linux上使用

    首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ...

  5. java_Cookies_1_商品浏览历史记录servlet2

    public class CookiesServlet2 extends HttpServlet { // 显示商品详细信息 public void doGet(HttpServletRequest ...

  6. java 去除重复项

    import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Demo20 { public stati ...

  7. POJ 3104 Drying(二分答案)

    [题目链接] http://poj.org/problem?id=3104 [题目大意] 给出n件需要干燥的衣服,烘干机能够每秒干燥k水分, 不在烘干的衣服本身每秒能干燥1水分 求出最少需要干燥的时间 ...

  8. Some good questions

    (一)#include <stdio.h>#include <stdlib.h>void getmemory(char *p){ p=(char *) malloc(100); ...

  9. 201521123105 第七周Java学习总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public boole ...

  10. Android官方命令深入分析之绘制9-patch

    9-patch是一个所见即所得的编辑器,允许你创建可以自动更改大小适应屏幕的bitmap图像.被选中的部分可以水平或垂直的进行缩放. 下面是使用9-patch工具创建一个9-patch图像的实例,首先 ...