基于Kubernetes安装Jenkins并配置操作环境
2018-02-11 17:27
621 查看
一、 安装并配置Kubernetes集群
本文中使用的kubernetes集群是1.8.0版本。具体安装配置步骤可查看这篇文章:Kubernetes1.8.3 集群环境搭建(CentOS)。二、安装Jenkins
生成自定义Jenkins master镜像
原始的Jenkins master镜像并不符合我们当前需求,所以在原始镜像的基础上做了一些改变,这一步并不是必须的,主要是看具体需求。原始镜像:jenkins/jenkins:2.89.3 该镜像从dockerhub上可直接下载 保存到本地仓库:192.168.1.184:5000/jenkins/jenkins:2.89.3-maven
Dockerfile:
FROM 192.168.1.184:5000/jenkins/jenkins:2.89.3 ENV MAVEN_VERSION 3.0.5 ENV JAVA_HOME /usr/java/jdk1.8.0_121 ENV MAVEN_HOME /opt/maven/apache-maven-${MAVEN_VERSION} ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # build java COPY ./jdk1.8.0_121 ${JAVA_HOME} COPY ./libltdl.so.7 /usr/lib/libltdl.so.7 # build maven COPY apache-maven-${MAVEN_VERSION}-bin.tar.gz /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz COPY settings.xml /tmp/maven/settings.xml USER root:root RUN mkdir -p /opt/maven/repository \ && cd /opt/maven \ && tar -zxvf /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz \ && cp /tmp/maven/settings.xml ${MAVEN_HOME}/conf/settings.xml \ && rm -rf /tmp/maven ENV PATH ${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}
该Dockerfile所做的工作为:
1. 重新安装Java环境并配置环境变量;
2. 安装Maven并配置环境变量;
3. 配置Maven仓库位置,以便启动时挂载宿主机仓库为容器中Maven仓库;
4. 设置启动用户为root。
生成自定义Jenkins slave镜像
节点镜像的配置与master基本一致,也是根据自己需要进行自定义话,也可以直接使用原始的slave镜像。原始镜像:jenkinsci/jnlp-slave:latest 该镜像从dockerhub上可直接下载 保存到本地仓库镜像:192.168.1.184:5000/jenkins/jnlp-slave:oracle-jdk-maven
Dockerfile:
FROM jenkinsci/jnlp-slave:latest ENV MAVEN_VERSION 3.0.5 ENV JAVA_HOME /usr/java/jdk1.8.0_121 ENV MAVEN_HOME /opt/maven/apache-maven-${MAVEN_VERSION} ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # build java COPY ./jdk1.8.0_121 ${JAVA_HOME} COPY ./libltdl.so.7 /usr/lib/libltdl.so.7 # build maven COPY apache-maven-${MAVEN_VERSION}-bin.tar.gz /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz COPY settings.xml /tmp/maven/settings.xml USER root:root RUN mkdir -p /opt/maven/repository \ && cd /opt/maven \ && tar -zxvf /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz \ && cp /tmp/maven/settings.xml ${MAVEN_HOME}/conf/settings.xml \ && rm -rf /tmp/maven \ && apt-get -yq update \ && apt-get -yq --no-install-recommends --no-install-suggests install sshpass \ && apt-get clean -y ENV PATH ${MAVEN_HOME}/bin:${PATH}
该Dockerfile操作与Jenkins master的Dockerfile基本一致。不过该镜像中缺少
libltdl.so.7文件,需要从宿主机中拷贝进去,该文件在slave节点容器中使用docker时会用到,因此十分重要。
Jenkins启动YAML配置文件
Jenkins 权限配置
此处直接将jenkins-admin集成了
cluster-admin权限,可根据自己具体需要进行权限的设置。
apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: jenkins name: jenkins-admin namespace: jenkins --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: jenkins-admin labels: k8s-app: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: jenkins roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io ---
Jenkins Deployment配置
此处配置简单明了,需要说明的地方是挂在卷,此处挂载了四个目录,下面分别做出挂载原因:
/var/jenkins_home(容器) –>
/ceph/jenkins_home(宿主机)
我们需要将容器中的Jenkins源目录挂载导本地宿主机,因为该目录下保存了Jenkins产生的所有配置、我们的自定义配置、任务配置及详情等等信息,所以需要持久化导宿主机,以便重新启动Jenkins容器的时候能够找到相应数据,防止数据丢失。此处我们使用的
ceph,保证整个kubernetes集群所有机器能够共享同一个目录。
/opt/maven/repository(容器) –>
/ceph/maven/repository(宿主机)
这一对挂载目录是Maven仓库的挂载目录,不管是Jenkins master容器或者是Jenkins slave目录都需要挂载该目录,以便容器中maven能够在下载编译代码时能够从该仓库中找到相应Jar包,同时也保证了数据的持久化。
/usr/bin/docker(容器) –>
/usr/bin/docker(宿主机)
/var/run/docker.sock(容器) –>
/var/run/docker.sock(宿主机)
这两对挂载目录作用是能够在容器中操作宿主机docker,具体的用途是在slave容器中编辑maven代码并生成jar之后,需要生成该代码服务的docker镜像并上传至本地私有仓库。因此需要操作宿主机docker以便完成这一系列操作。
apiVersion: apps/v1beta2 kind: Deployment metadata: name: jenkins namespace: jenkins labels: k8s-app: jenkins spec: replicas: 1 selector: matchLabels: k8s-app: jenkins template: metadata: labels: k8s-app: jenkins spec: containers: - name: jenkins image: 192.168.1.184:5000/jenkins/jenkins:2.89.3-maven imagePullPolicy: IfNotPresent volumeMounts: - name: jenkins-home mountPath: /var/jenkins_home - name: maven-repository mountPath: /opt/maven/repository - name: docker mountPath: /usr/bin/docker - name: docker-sock mountPath: /var/run/docker.sock ports: - containerPort: 8080 - containerPort: 50000 volumes: - name: jenkins-home hostPath: path: /ceph/jenkins_home - name: maven-repository hostPath: path: /ceph/maven/repository - name: docker hostPath: path: /usr/bin/docker - name: docker-sock hostPath: path: /var/run/docker.sock serviceAccountName: jenkins-admin ---
Jenkins Service配置
该Service配置作用是能够让用户访问到Jenkins。此处开放并配置了8080、
50000端口,这两个端口在
Deployment
中也应该开放。此处配置的宿主机开放端口分别为:
31888、
50000
kind: Service apiVersion: v1 metadata: labels: k8s-app: jenkins name: jenkins namespace: jenkins annotations: prometheus.io/scrape: 'true' spec: ports: - name: jenkins port: 8080 nodePort: 31888 targetPort: 8080 - name: jenkins-agent port: 50000 nodePort: 50000 targetPort: 50000 type: NodePort selector: k8s-app: jenkins
启动Jenkins镜像容器
kubectl apply -f jenkins-account.yaml kubectl apply -f jenkins-deployment.yaml kubectl apply -f jenkins-service.yaml
三、访问并操作Jenkins
初次访问
Jenkins容器启动后,通过
192.168.1.185:31888即可访问
Jenkins。注意:此处访问的IP是取决于你kubernetes集群的节点IP,此处我的Jenkins容器运行在192.168.1.185,因此我使用该链接可访问。
首次访问,需要设置登录用户名密码:
然后会要求安装一些插件,可选择默认安装,也可自定义选择要安装的插件:
一顿操作之后,插件也安装完毕,则会跳转到首页, 此时Jenkins就可以真正使用了:
需要安装的插件
Kubernetes Cli Plugin:该插件可直接在Jenkins中使用kubernetes命令行进行操作。
Kubernetes plugin: 使用kubernetes则需要安装该插件
Kubernetes Continuous Deploy Plugin:kubernetes部署插件,可根据需要使用
还有更多的插件可供大家选择,可点击
系统管理->
管理插件进行管理和添加
也可登录该网站:https://plugins.jenkins.io/,查找需要的插件。
kubernetes云配置
点击系统管理->
系统设置,往下拉可看到
云,点击
新增一个云来新增一个kubernetes云。
在该
kubernetes云下, 可新增
Kubernetes Pod Template,配置一个模板容器配置。这样在任务配置时可使用label获取该模板配置进行应用,简化了任务配置。
全局配置
点击系统管理->
系统设置,下拉找到
全局属性,可根据需要配置Java环境变量、Maven环境变量
全局工具配置
点击系统管理->
全局工具配置,此处可配置配置一些常用的工具配置,比如java、ant、maven、docker。在此处配置好之后,在配置任务时通过
${配置的name}即可获取到配置信息。此处配置Maven演示
此处配置了
Maven的全局工具配置,则在任务配置时,通过
${m3}即可获取到该配置。
创建Pipeline任务
Pipeline任务采用流式的处理方法,步骤清晰,非常适合进行任务配置。点击新建创建一个Pipeline任务。
创建完成后,会进入任务配置界面,下拉找到Pipeline(中文版为:流水线),则可编写Pipeline,进行任务配置。
Pipeline写法可通过网上教程学习,操作十分简单~ 从图中左下角可以看到有一个
流水线写法,此项操作可通过配置的形式生成Pipeline代码。下面看一下。
流水线写法
点击任务配置页中Pipeline配置处左下角的流水线写法,则可通过配置生成Pipeline代码。点击
示例步骤,可选择要生成的步骤,此处拿获取登录密码来举例,大家在执行任务时,经常会遇到需要远程ssh到某台机器操作、上传下载docker私有仓库镜像等操作,而这些操作都需要输入用户名密码,但是在任务配置代码中直接显示的写用户名密码又是不行的,这个时候就需要有个地方能够保存密码,我们通过配置的变量获取,这样就避免了账号密码的泄露。正好jenkins提供这个插件,在流水线写法中即可生成该操作代码:
点击
username and password (separated)
根据上图中的配置,点击
生成流水线脚本,即可生成代码:
这段脚本如何使用?
withCredentials([usernamePassword(credentialsId: 'b47d0952-12e6-4499-a46e-355fd793d447', passwordVariable: 'ssh_password', usernameVariable: 'ssh_username')]) { sh "sshpass -p ${ssh_password} scp xxx.txt ${ssh_username}@192.168.1.184:/tmp/" }
从上面的代码就可以看出,只要将要执行的代码放到
withCredentials大括号中,即可通过变量名获取到用户名、密码进行操作。
Pipeline流水线写法还有很多好用的插件可用,比如kubernetes ctl命令行使用,kubernetes 部署操作,都可以通过配置生成执行脚本。
运行Pipeline任务
编写完任务配置之后,点击保存跳转到任务操作页面,点击左侧立即构建,即可执行任务
点击每一个stage步骤上的
logs,可查看当前运行的log信息。
相关文章推荐
- Selenium与phantomjs安装与环境配置,以及易班网站模拟登陆操作
- Android使用Jenkins完成自动化打包操作---Jenkins的安装以及基础配置
- centreon+nagios安装配置操作手册(1)——环境搭建
- linux命令基本操作以及Java的安装与环境的配置
- [Jenkins]持续集成环境下fingbug插件的安装使用与配置
- Jenkins 一: 环境安装以及配置
- linux操作入门---配置px4环境/安装eclipse
- xshell远程终端操作Ubuntu server安装LAMP环境之最详细笔记之二PHP开发环境配置
- Linux 环境部署记录(三) - Jenkins安装与配置
- 使用tomcat安装Jenkins并配置maven环境
- Jenkins---安装及配置/jenkins环境搭建
- Jenkins之安装与环境配置
- Linux环境下(Ubuntu 16.04.1 LTS),Tomcat和Jenkins的安装和配置
- Jenkins+maven+SVN+Tomcat持续集成发布环境安装和配置
- jenkins+gitlab+maven+tomcat持续集成环境安装配置
- 在windows中安装Jenkins并配置maven环境
- WDCP上配置SSL证书即https 2017-08-28 百度总结 操作环境:linux的WDCP操作面板(没有操作面板就在命令行操作) wdcp 安装ssl证书教程实现https访问 1.申请
- editplus打造java运行环境(安装、配置、操作)
- FC6下samba源代码安装以及环境配置