思路
- 准备gitee仓库
- 搭建Jenkins服务
- 部署JDK
- 部署Tomcat
- 部署Jenkins
- 测试Jenkins服务
- 上线案例代码
- 修改案例代码
- 测试结果
创建代码仓库
见图
Linux中初始化代码仓库
[root@k8s231.oldboyedu.com ~/jenkins]$ mkdir /root/jenkins
mkdir: cannot create directory ‘/root/jenkins’: File exists
[root@k8s231.oldboyedu.com ~/jenkins]$ cd /root/jenkins
[root@k8s231.oldboyedu.com ~/jenkins]$ ls
jenkins-k8s.zip
[root@k8s231.oldboyedu.com ~/jenkins]$ unzip jenkins-k8s.zip
[root@k8s231.oldboyedu.com ~/jenkins]$ ls
jenkins-k8s jenkins-k8s.zip
[root@k8s231.oldboyedu.com ~/jenkins]$ cd jenkins-k8s/
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ ls
apache-tomcat-8.0.27.tar.gz jdk-8u102-linux-x64.rpm jenkins-data.tar.gz jenkins.war yiliaoqixie.zip
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ unzip yiliaoqixie.zip
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ cd yiliaoqixie/
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git config --global user.name "luo2050"
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git config --global user.email "luoqiangsong2022@163.com"
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git init
Initialized empty Git repository in /root/jenkins/jenkins-k8s/yiliaoqixie/.git/
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git add .
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git tag -a v0.1
fatal: Failed to resolve 'HEAD' as a valid ref.
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git tag -a v0.1 -m 'first commit'
fatal: Failed to resolve 'HEAD' as a valid ref.
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git commit -m 'first commit'
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git tag -a v0.1 -m 'first commit'
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git tag -l
v0.1
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git remote add origin https://gitee.com/luo2050/yiliao.git
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git push -u origin "master" --tags
Username for 'https://gitee.com': luo2050
Password for 'https://luo2050@gitee.com':
...
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
输出如下
搭建Jenkins服务
部署JDK
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ cd /root/jenkins/jenkins-k8s
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ rpm -ivh jdk-8u102-linux-x64.rpm && java -version
部署Tomcat
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ mkdir -pv /oldboyedu/softwares && tar xf apache-tomcat-8.0.27.tar.gz -C /oldboyedu/softwares
mkdir: created directory ‘/oldboyedu/softwares’
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ rm -rf /oldboyedu/softwares/apache-tomcat-8.0.27/webapps/*
部署Jenkins
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ cp jenkins.war /oldboyedu/softwares/apache-tomcat-8.0.27/webapps/ROOT.war
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ tar xf jenkins-data.tar.gz -C /root/ # 解压jenkins数据到"/root"目下,会创建一个隐藏目录(.jenkins)
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ ls /root/.jenkins/ secrets
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s]$ /oldboyedu/softwares/apache-tomcat-8.0.27/bin/startup.sh # 起Tomcat服务,也就起了Jenkins服务。
# 整体下来,就像WordPress部署在Nginx上一样
测试Jenkins
新建Jenkins任务
- 能看到如下信息,说明Jenkins服务搭建成功
将案例代码上线k8s
编写dockerfile
[root@k8s231.oldboyedu.com ~/jenkins]$ cd /root/jenkins/jenkins-k8s/yiliaoqixie/
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ cat > Dockerfile <<'EOF'
> FROM harbor.oldboyedu.com/web/apps:v1
>
>
> LABEL school=oldboyedu \
> class=linux85 \
> auther=JasonYin
>
> ADD . /usr/share/nginx/html
> EOF
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
编写build.sh脚本
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ cat > build.sh <<'EOF'
> #!/bin/bash
>
>
> VERSION=$1
>
> docker login -u admin -p 1 harbor.oldboyedu.com
> docker build -t harbor.oldboyedu.com/project/yiliaoqixie:v0.${VERSION:-1} .
> docker push harbor.oldboyedu.com/project/yiliaoqixie:v0.${VERSION:-1}
> docker logout harbor.oldboyedu.com
> kubectl set image deploy oldboyedu-linux-yiliao yiliao=harbor.oldboyedu.com/project/yiliaoqixie:v0.${VERSION:-1}
> EOF
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ chmod +x build.sh
编写资源清单
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ cd /root/jenkins/
[root@k8s231.oldboyedu.com ~/jenkins]$
[root@k8s231.oldboyedu.com ~/jenkins]$ cat > deploy-yiliaoqixie.yaml <<'EOF'
> apiVersion: apps/v1
> kind: Deployment
> metadata:
> name: oldboyedu-linux-yiliao
> spec:
> replicas: 3
> selector:
> matchExpressions:
> - key: apps
> operator: Exists
> template:
> metadata:
> labels:
> apps: yiliao
> spec:
> containers:
> - name: yiliao
> image: harbor.oldboyedu.com/project/yiliaoqixie:v0.4
>
> ---
>
> apiVersion: v1
> kind: Service
> metadata:
> name: oldboyedu-linux-yiliao-svc
> spec:
> selector:
> apps: yiliao
> type: ClusterIP
> ports:
> - port: 80
> targetPort: 80
>
> ---
>
> apiVersion: networking.k8s.io/v1
> kind: Ingress
> metadata:
> name: oldboyedu-linux-yiliao
> annotations:
> kubernetes.io/ingress.class: traefik # 指定Ingress 控制器为"traefik"
> spec:
> rules:
> - host: yiliao.oldboyedu.com
> http:
> paths:
> - backend:
> service:
> name: oldboyedu-linux-yiliao-svc
> port:
> number: 80
> path: "/"
> pathType: "Prefix"
> EOF
[root@k8s231.oldboyedu.com ~/jenkins]$
访问测试
[root@k8s231.oldboyedu.com ~/jenkins]$ kubectl apply -f deploy-yiliaoqixie.yaml
[root@k8s231.oldboyedu.com ~/jenkins]$ kubectl get svc | grep traefik
traefik NodePort 10.200.120.112 <none> 80:31469/TCP,443:32740/TCP 4d
# 修改Windows的hosts文件
# 10.200.120.112 yiliao.oldboyedu.com
修改代码文件,进行测试
修改代码
[root@k8s231.oldboyedu.com ~/jenkins]$ cd /root/jenkins/jenkins-k8s/yiliaoqixie/
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ vim index.html
上传修改后的代码
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git add .
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git commit -m 'modify index.html'
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$ git push -u origin --all
Username for 'https://gitee.com': luo2050
Password for 'https://luo2050@gitee.com':
...
[root@k8s231.oldboyedu.com ~/jenkins/jenkins-k8s/yiliaoqixie]$
- 查看提交信息
- 查看index.html修改的内容
配置Jenkins发布
- 进入配置页面
- 参数
- 执行shell
- 开始构建
- 输出结果,这里由于没有给build.sh权限,导致运行失败,给了执行权限,但是没有重新上传代码,又失败了一次,所以第四次才成功
- 页面访问