jenkins自动化构建docker镜像并部署到k8s集群
一、集群规划
二、安装gitlab并上传代码
1. 下载安装包,并安装
[root@kub_node2 tools]# wget https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm --2020-10-04 21:13:08-- https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm Resolving mirror.tuna.tsinghua.edu.cn (mirror.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1 Connecting to mirror.tuna.tsinghua.edu.cn (mirror.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 569408968 (543M) [application/x-redhat-package-manager] Saving to: ‘gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm’ 100%[============================================================================================================>] 569,408,968 11.7MB/s in 47s 2020-10-04 21:13:56 (11.4 MB/s) - ‘gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm’ saved [569408968/569408968] [root@kub_node2 tools]# ll total 556068 -rw-r--r-- 1 root root 569408968 May 1 2019 gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm [root@kub_node2 tools]# rpm -ivh gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm warning: gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY Preparing... ################################# [100%] Updating / installing... 1:gitlab-ce-11.9.11-ce.0.el7 ################################# [100%] It looks like GitLab has not been configured yet; skipping the upgrade script. *. *. *** *** ***** ***** .****** ******* ******** ******** ,,,,,,,,,***********,,,,,,,,, ,,,,,,,,,,,*********,,,,,,,,,,, .,,,,,,,,,,,*******,,,,,,,,,,,, ,,,,,,,,,*****,,,,,,,,,. ,,,,,,,****,,,,,, .,,,***,,,, ,*,. _______ __ __ __ / ____(_) /_/ / ____ _/ /_ / / __/ / __/ / / __ `/ __ \ / /_/ / / /_/ /___/ /_/ / /_/ / \____/_/\__/_____/\__,_/_.___/ Thank you for installing GitLab! GitLab was unable to detect a valid hostname for your instance. Please configure a URL for your GitLab instance by setting `external_url` configuration in /etc/gitlab/gitlab.rb file. Then, you can start your GitLab instance by running the following command: sudo gitlab-ctl reconfigure For a comprehensive list of configuration options please see the Omnibus GitLab readme https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
2. 修改配置文件
[root@kub_node2 tools]# vim /etc/gitlab/gitlab.rb [root@kub_node2 tools]# sed -n 13p /etc/gitlab/gitlab.rb external_url 'http://192.168.0.208' [root@kub_node2 tools]# sed -n 1535p /etc/gitlab/gitlab.rb prometheus_monitoring['enable'] = false
3.启动gitlab
[root@kub_node2 tools]# gitlab-ctl reconfigure
4.访问gitlab,修改root密码,创建project
http://192.168.0.208
5.gitlab上传代码
[root@kub_node2 tools]# cd /opt [root@kub_node2 opt]# mkdir xiaoniao [root@kub_node2 opt]# cd xiaoniao/ [root@kub_node2 xiaoniao]# git config --global user.name "Administrator" [root@kub_node2 xiaoniao]# git config --global user.email "admin@example.com" [root@kub_node2 xiaoniao]# rz [root@kub_node2 xiaoniao]# ll total 92 -rw-r--r-- 1 root root 91014 Oct 4 21:48 xiaoniaofeifei.zip [root@kub_node2 xiaoniao]# unzip xiaoniaofeifei.zip Archive: xiaoniaofeifei.zip inflating: sound1.mp3 creating: img/ inflating: img/bg1.jpg inflating: img/bg2.jpg inflating: img/number1.png inflating: img/number2.png inflating: img/s1.png inflating: img/s2.png inflating: 21.js inflating: 2000.png inflating: icon.png inflating: index.html [root@kub_node2 xiaoniao]# ll total 236 -rw-r--r-- 1 root root 15329 Aug 2 2014 2000.png -rw-r--r-- 1 root root 51562 Aug 2 2014 21.js -rw-r--r-- 1 root root 254 Aug 2 2014 icon.png drwxr-xr-x 2 root root 4096 Aug 8 2014 img -rw-r--r-- 1 root root 3049 Aug 2 2014 index.html -rw-r--r-- 1 root root 63008 Aug 2 2014 sound1.mp3 -rw-r--r-- 1 root root 91014 Oct 4 21:48 xiaoniaofeifei.zip [root@kub_node2 xiaoniao]# rm -rf xiaoniaofeifei.zip [root@kub_node2 xiaoniao]# ls 2000.png 21.js icon.png img index.html sound1.mp3
[root@kub_node2 xiaoniao]# git init Reinitialized existing Git repository in /opt/xiaoniao/.git/ [root@kub_node2 xiaoniao]# git add . [root@kub_node2 xiaoniao]# git commit -m "Initial commit" [master (root-commit) 9568708] Initial commit 11 files changed, 184 insertions(+) create mode 100644 2000.png create mode 100644 21.js create mode 100644 icon.png create mode 100644 img/bg1.jpg create mode 100644 img/bg2.jpg create mode 100644 img/number1.png create mode 100644 img/number2.png create mode 100644 img/s1.png create mode 100644 img/s2.png create mode 100644 index.html create mode 100644 sound1.mp3 [root@kub_node2 xiaoniao]# git status # On branch master nothing to commit, working directory clean [root@kub_node2 xiaoniao]# git push -u origin master Username for 'http://192.168.0.208': root Password for 'http://root@192.168.0.208': Counting objects: 14, done. Delta compression using up to 2 threads. Compressing objects: 100% (14/14), done. Writing objects: 100% (14/14), 88.15 KiB | 0 bytes/s, done. Total 14 (delta 0), reused 0 (delta 0) To http://192.168.0.208/root/xiaoniao.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
三、安装jenkins并拉取代码
1. 安装jenkins
[root@kub_node1 ~]# mkdir -p /server/tools [root@kub_node1 ~]# cd /server/tools/
[root@kub_node1 tools]# rz [root@kub_node1 tools]# ll total 246552 -rw-r--r-- 1 root root 9128610 Oct 4 21:57 apache-tomcat-8.0.27.tar.gz -rw-r--r-- 1 root root 166044032 Oct 4 21:57 jdk-8u102-linux-x64.rpm -rw-r--r-- 1 root root 77289987 Oct 4 21:58 jenkins.war
#安装jdk
[root@kub_node1 tools]# rpm -ivh jdk-8u102-linux-x64.rpm Preparing... ################################# [100%] Updating / installing... 1:jdk1.8.0_102-2000:1.8.0_102-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar... [root@kub_node1 tools]# echo $? 0 [root@kub_node1 tools]# java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
#安装tomcat
[root@kub_node1 tools]# mkdir /app [root@kub_node1 tools]# tar -xf apache-tomcat-8.0.27.tar.gz -C/app [root@kub_node1 tools]# rm -fr /app/apache-tomcat-8.0.27/webapps/*
#安装jenkins
[root@kub_node1 tools]# mv jenkins.war /app/apache-tomcat-8.0.27/webapps/ROOT.war [root@kub_node1 tools]# ll /app/apache-tomcat-8.0.27/webapps/ total 75480 -rw-r--r-- 1 root root 77289987 Oct 4 21:58 ROOT.war
[root@kub_node1 tools]# rz [root@kub_node1 tools]# ll total 258540 -rw-r--r-- 1 root root 9128610 Oct 4 21:57 apache-tomcat-8.0.27.tar.gz -rw-r--r-- 1 root root 166044032 Oct 4 21:57 jdk-8u102-linux-x64.rpm -rw-r--r-- 1 root root 89566714 Oct 4 22:08 jenkin-data.tar.gz [root@kub_node1 tools]# tar -xf jenkin-data.tar.gz -C /root [root@kub_node1 tools]# ll total 258540 -rw-r--r-- 1 root root 9128610 Oct 4 21:57 apache-tomcat-8.0.27.tar.gz -rw-r--r-- 1 root root 166044032 Oct 4 21:57 jdk-8u102-linux-x64.rpm -rw-r--r-- 1 root root 89566714 Oct 4 22:08 jenkin-data.tar.gz [root@kub_node1 tools]# ll -a total 258548 drwxr-xr-x 2 root root 4096 Oct 4 22:08 . drwxr-xr-x 3 root root 4096 Oct 4 21:56 .. -rw-r--r-- 1 root root 9128610 Oct 4 21:57 apache-tomcat-8.0.27.tar.gz -rw-r--r-- 1 root root 166044032 Oct 4 21:57 jdk-8u102-linux-x64.rpm -rw-r--r-- 1 root root 89566714 Oct 4 22:08 jenkin-data.tar.gz [root@kub_node1 tools]# ll -a /root total 319976 dr-xr-x---. 6 root root 4096 Oct 4 22:08 . dr-xr-xr-x. 23 root root 4096 Oct 4 22:02 .. -rw-r--r-- 1 root root 8136 Oct 4 16:43 .bash_history -rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout -rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc -rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc -rw-r--r-- 1 root root 112689664 Jan 15 2019 docker_nginx1.13.tar.gz -rw------- 1 root root 0 Apr 27 22:27 .history drwxr-xr-x 11 root root 4096 May 30 2019 .jenkins drwxr-xr-x 2 root root 4096 Oct 4 22:01 .oracle_jre_usage drwxr----- 3 root root 4096 Apr 27 22:11 .pki -rw-r--r-- 1 root root 214888960 Feb 5 2018 pod-infrastructure-latest.tar.gz drwx------ 2 root root 4096 Sep 20 22:56 .ssh -rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc -rw-r--r-- 1 root root 225 Sep 26 14:37 test.py -rw------- 1 root root 5456 Oct 4 17:48 .viminfo [root@kub_node1 tools]# ll -a /root/.jenkins/ total 96 drwxr-xr-x 11 root root 4096 May 30 2019 . dr-xr-x---. 6 root root 4096 Oct 4 22:08 .. -rw-r--r-- 1 root root 1642 May 30 2019 config.xml -rw-r--r-- 1 root root 183 May 29 2019 hudson.model.UpdateCenter.xml -rw-r--r-- 1 root root 370 May 29 2019 hudson.plugins.git.GitTool.xml -rw------- 1 root root 1712 May 29 2019 identity.key.enc -rw-r--r-- 1 root root 1861 May 30 2019 jenkins.install.InstallUtil.installingPlugins -rw-r--r-- 1 root root 5 May 30 2019 jenkins.install.InstallUtil.lastExecVersion -rw-r--r-- 1 root root 5 May 30 2019 jenkins.install.UpgradeWizard.state -rw-r--r-- 1 root root 179 May 30 2019 jenkins.model.JenkinsLocationConfiguration.xml -rw-r--r-- 1 root root 171 May 29 2019 jenkins.telemetry.Correlator.xml drwxr-xr-x 2 root root 4096 May 29 2019 jobs -rw-r--r-- 1 root root 0 May 29 2019 .lastStarted drwxr-xr-x 3 root root 4096 May 29 2019 logs -rw-r--r-- 1 root root 907 May 29 2019 nodeMonitors.xml drwxr-xr-x 2 root root 4096 May 29 2019 nodes -rw-r--r-- 1 root root 41 May 30 2019 .owner drwxr-xr-x 77 root root 4096 May 30 2019 plugins -rw-r--r-- 1 root root 129 May 30 2019 queue.xml -rw-r--r-- 1 root root 64 May 29 2019 secret.key -rw-r--r-- 1 root root 0 May 29 2019 secret.key.not-so-secret drwx------ 4 root root 4096 May 29 2019 secrets drwxr-xr-x 2 root root 4096 May 29 2019 updates drwxr-xr-x 2 root root 4096 May 29 2019 userContent drwxr-xr-x 3 root root 4096 May 29 2019 users drwxr-xr-x 2 root root 4096 May 29 2019 workflow-libs
#启动tomcat
[root@kub_node1 tools]# /app/apache-tomcat-8.0.27/bin/startup.sh Using CATALINA_BASE: /app/apache-tomcat-8.0.27 Using CATALINA_HOME: /app/apache-tomcat-8.0.27 Using CATALINA_TMPDIR: /app/apache-tomcat-8.0.27/temp Using JRE_HOME: /usr Using CLASSPATH: /app/apache-tomcat-8.0.27/bin/bootstrap.jar:/app/apache-tomcat-8.0.27/bin/tomcat-juli.jar Tomcat started. [root@kub_node1 tools]# netstat -lntup |grep 8080 tcp6 0 0 :::8080 :::* LISTEN 6322/java
2. 测试访问jenkins
默认用户:admin 密码:123456
3. 在jenkins上创建构建项目
1)配置认证信息
[root@kub_node1 tools]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:AOU4lZY72hUvymSD2kDZEyn8QXtX70Z1/SxkMsVNCNo root@kub_node1 The key's randomart image is: +---[RSA 2048]----+ | . +++oo . .+o++| | = =*+ .. +o.=.o| | . o+=+..o. E= ..| | . oo*oo .o . o| | + * =S. o . | | . o + . | | | | | | | +----[SHA256]-----+ [root@kub_node1 tools]# ll /root/.ssh/ total 12 -rw------- 1 root root 0 Sep 20 15:40 authorized_keys -rw------- 1 root root 1679 Oct 4 22:21 id_rsa -rw-r--r-- 1 root root 396 Oct 4 22:21 id_rsa.pub -rw-r--r-- 1 root root 350 Sep 20 22:56 known_hosts [root@kub_node1 tools]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZWCH34svIrXHF1xM/sNooPRHo0cjTrxyOG2ZB0L6HUQzFLE6B57I/4ylPoAATQfLg1zXjNjGpfvXY4kltVnrswZtKg/es26OA26DqqbR0Qp4WYW61EX8HTkiLGEVlZ5fLHlY3b+rnstsWWiE2pUKI4uF4lGURkQaXg0m+OOs3Zwal89d+fUMQ6foXVRlSV2vjj1O1kNPwI2nHWBs8MRX0fKFIxf/2LibV7CQAE886r/Riur15Ekt3zASjEKZVGSRvTtBDaBppjC++ioAEsc9oOOqEJvbrg///6f1WCPQhdH4PozBk7xjSF2+/+eh9xGFxlscUPgCVSP5lpV2A3iER root@kub_node1
2)在gitlab上配置密钥
点击用户—>setting—>ssh-keys
3)jenkins上创建全局凭据
点击凭据—>系统—>全局凭据—>添加凭据
查看私钥
[root@kub_node1 tools]# cat /root/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA2Vgh9+LLyK1xxdcTP7DaKD0R6NHI068cjhtmQdC+h1EMxSxO geeyP+MpT6AAE0Hy4Nc14zYxqX712OJJbVZ67MGbSoP3rNujgNug6qm0dEKeFmFu tRF/B05IixhFZWeXyx5WN2/q57LbFlohNqVCiOLheJRlEZEGl4NJvjjrN2cGpfPX fn1DEOn6F1UZUldr449TtZDT8CNpx1gbPDEV9HyhSMX/9i4m1ewkABPPOq/0Yrq9 eRJLd8wEoxCmVRkkb07QQ2gaaYwvvoqABLHPaDjqhCb264P//+n9Vgj0IXR+D6Mw ZO8Y0hdvv/nofcRhcZbHFD4AlUj+ZaVdgN4hEQIDAQABAoIBAFMq7GSkvoIeDKk9 8bmvfOtk4xOKIyUNnwmp5mlM7XtuQkq495myBX14+Xfkq+Kym7P55j75n+tSD9Vc Ueiq7QLn2vqaoQ3eRiSq5lqlcc4DJ+c8hVZ4SXmMNSo0sWlqSKWLCEbSZrser8NP 3eHBP0KOPuUbM8mTC0izDmbh9PAPoeSf2ZwLC+yAvwDtcM5Joli8rBHDwT77SlkP 5WACNOpAqvQ4vxlQW5UkJ3YupH+15qZMgWbYmwj8iAXW8qW5Z0HqLEN5SWuuF+Kp IEq/ncNl3nuPa8/MCpbr8wfJNS7UMgtX2PDBatcOTrZ5P/m3TFlqjjQ1xgNCjfbY 7QKHMKECgYEA8P/I34ndypG5YaecyhDq/p3P6TldRJ2qGnZNprl1+v7hBanO3VjS ExMCBnLiSLsUnTVoLAdBLt29Wq8qHyRaEp0Ndtur/UUvwJYFNQ8N+cnaSOS4IJ/x /wGwrpNwtNyte4ljheK/UFMbs+N05GwjiqjhB5syn4x+qDTfc33xkzUCgYEA5t9q 82yaU3yXEeV0y6zeuzKbdGHypWezi0FWlUJnRDyJ0B9jEA4/OEVWJwA3xAzNRm8C qWuCFNkGjF2gad2hjtuSJ7ct4n8d0mTsFEP6b2d+kEuQU4QvrM6L2eubz2MPpGO5 0FqtbeI3G1cpI1D8yxk+NuFFF/lpPqLe57W/le0CgYEAwZ3+F/l/QruIoDg08vJc mWrYGpuHnxS8EL5y7Dub2abjydT+6T3uqHxg6CVsPtpuWU8K/jRl3e0vr6eCw7pE 0ydyJceeicAH+UWNsW8C32eYA3AdrbhSh3koJVk291dD2TgryOi+ox3h58gZpVpr w36iK6Y4KY6KQ0EXNIY+ivECgYA3qPVn6m7qYccqEV+vGuY3y2OfE14kcnPexsnR AklTMiUnf+mqHUUwk8bJcEwBf/SdXnYN0lVyIUBq5sedvkkM3/LEkG0Hhg3yg1JH MHxYD2N79ju9Zsj3qHQe/aZ6wS8sOr65dKMLMtaGSOUqFoRbkqJlKLo3pXGyICIN Ssv9oQKBgQDDnpsghC1IgbQwuneU8QzBLoen13Bf++D0HO99RDrhCDJcfXOmxe/4 e9VegAR8mXBpRg5Cz5Q8w0n+LHtnP7fF5OmcRK4AmRpbd/1xyf4i+xMF2FOtoL8W 5BQYYICjUgCR9zHZ0COPNgswn7SHTiaS3IMpzQmeXY8kaXbU96aWkg== -----END RSA PRIVATE KEY-----
4)创建项目
5)立即构建,控制台输出
6)查看代码
[root@kub_node1 tools]# cd /root/.jenkins/work workflow-libs/ workspace/ [root@kub_node1 tools]# cd /root/.jenkins/workspace/ [root@kub_node1 workspace]# ll total 8 drwxr-xr-x 4 root root 4096 Oct 4 22:43 xiaoniao drwxr-xr-x 2 root root 4096 Oct 4 22:43 xiaoniao@tmp [root@kub_node1 workspace]# ll xiaoniao total 144 -rw-r--r-- 1 root root 15329 Oct 4 22:43 2000.png -rw-r--r-- 1 root root 51562 Oct 4 22:43 21.js -rw-r--r-- 1 root root 254 Oct 4 22:43 icon.png drwxr-xr-x 2 root root 4096 Oct 4 22:43 img -rw-r--r-- 1 root root 3049 Oct 4 22:43 index.html -rw-r--r-- 1 root root 63008 Oct 4 22:43 sound1.mp3
拉取成功!!!
4. 构建docker镜像并测试
1)编写dockerfile
[root@kub_node2 xiaoniao]# vim dockerfile [root@kub_node2 xiaoniao]# cat dockerfile FROM 192.168.0.212:5000/nginx:1.15 ADD . /usr/share/nginx/html
2)添加docker build构建时不add的文件
[root@kub_node2 xiaoniao]# vim .dockerignore
[root@kub_node2 xiaoniao]# cat .dockerignore
dockerfile
3)创建docker镜像,并启动容器
[root@kub_node2 xiaoniao]# docker build -t xiaoniao:v1 . Sending build context to Docker daemon 328.2 kB Step 1/2 : FROM 192.168.0.212:5000/nginx:1.15 ---> be1f31be9a87 Step 2/2 : ADD . /usr/share/nginx/html ---> b4c1743c3451 Removing intermediate container 00a19c2a0f10 Successfully built b4c1743c3451 [root@kub_node2 xiaoniao]# docker image ls |grep xiaoniao xiaoniao v1 b4c1743c3451 58 seconds ago 109 MB [root@kub_node2 xiaoniao]# docker run -d -p 88:80 xiaoniao:v1 6d91a48f607f015f71d43f987b7b2c36d5d94c8f7ca18124795349fd52807820 [root@kub_node2 xiaoniao]# docker ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d91a48f607f xiaoniao:v1 "nginx -g 'daemon ..." 9 seconds ago Up 5 seconds 0.0.0.0:88->80/tcp relaxed_swartz
4)测试
[root@kub_node2 xiaoniao]# curl 192.168.0.208:88 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta id="viewport" name="viewport" content="width=device-width,user-scalable=no" /> <script type="text/javascript" src="21.js"></script> <title>小鸟飞飞飞-文章库小游戏</title> <style type="text/css"> body { margin:0px; } </style> <script language=javascript> var mebtnopenurl = 'http://www.wenzhangku.com/weixin/'; window.shareData = { "imgUrl": "http://www.wenzhangku.com/weixin/xiaoniaofeifei/icon.png", "timeLineLink": "http://www.wenzhangku.com/weixin/xiaoniaofeifei/", "tTitle": "小鸟飞飞飞-文章库小游戏", "tContent": "从前有一只鸟,飞着飞着就死了。" }; document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { WeixinJSBridge.on('menu:share:appmessage', function(argv) { WeixinJSBridge.invoke('sendAppMessage', { "img_url": window.shareData.imgUrl, "link": window.shareData.timeLineLink, "desc": window.shareData.tContent, "title": window.shareData.tTitle }, function(res) { document.location.href = mebtnopenurl; }) }); WeixinJSBridge.on('menu:share:timeline', function(argv) { WeixinJSBridge.invoke('shareTimeline', { "img_url": window.shareData.imgUrl, "img_width": "640", "img_height": "640", "link": window.shareData.timeLineLink, "desc": window.shareData.tContent, "title": window.shareData.tTitle }, function(res) { document.location.href = mebtnopenurl; }); }); }, false); function dp_submitScore(a,b){ if(a&&b>=a&&b>10){ //alert("新纪录哦!你过了"+b+"关!") dp_share(b) } } function dp_Ranking(){ document.location.href = mebtnopenurl; } function dp_share(t){ document.title = "我玩小鸟飞飞飞过了"+t+"关!你能超过洒家我吗?"; document.getElementById("share").style.display=""; window.shareData.tTitle = document.title; } </script> </head> <body> <div style="text-align:center;"> <canvas id="linkScreen"> 很遗憾,您的浏览器不支持HTML5,请使用支持HTML5的浏览器。 </canvas> </div> <div id="mask_container" align="center" style="width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; display: none; z-index: 100000; background-color: rgb(255, 255, 255);"> <img id="p2l" src="img/p2l.jpg" style="position: absolute;left: 50%;top: 50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)" > </div> <div id=share style="display:none"> <img width=100% src="2000.png" style="position:absolute;top:0;left:0;display:" onclick="document.getElementById('share').style.display='none';"> </div> <div style="display:none;"> 这里加统计 </div> </body> </html>
5. jenkins自动化构建docker镜像
1)推送当前代码到gitlab仓库
[root@kub_node2 xiaoniao]# git add . [root@kub_node2 xiaoniao]# git commit -m 'first update' [master a76dbc4] first update 2 files changed, 3 insertions(+) create mode 100644 .dockerignore create mode 100644 dockerfile [root@kub_node2 xiaoniao]# git push -u origin master Username for 'http://192.168.0.208': root Password for 'http://root@192.168.0.208': Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 384 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) To http://192.168.0.208/root/xiaoniao.git 9568708..a76dbc4 master -> master Branch master set up to track remote branch master from origin.
2)修改jenkins配置
3)构建镜像
点击立即构建,查看控制台输出
私有仓库查看镜像
[root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/ busybox heapster_grafana kubernetes-dashboard-amd64 nginx tomcat-app xiaoniao heapster heapster_influxdb mysql pod-infrastructure wordpress [root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/ _layers _manifests _uploads [root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/ revisions tags [root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/tags/ v1
6.自动化构建docker镜像解决版本问题
注:使用jenkins环境变量 BUILD_ID,此参数为构建次数
1)修改jenkins配置
2)构建
[root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/tags/
v1 v4
版本已更新,版本号为构建次数
7. 防止误操作立即构建
1)修改jenkins配置
#!/bin/bash if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT == $GIT_COMMIT ];then echo "no change,skip build" exit 0 else docker build -t 192.168.0.212:5000/xiaoniao:v$BUILD_ID . docker push 192.168.0.212:5000/xiaoniao:v$BUILD_ID fi
2)构建,查看控制台输出
3)修改站点目录文件,并上传至远程仓库
[root@kub_node2 xiaoniao]# vim index.html [root@kub_node2 xiaoniao]# cat index.html |grep dokcer <title>小鸟飞飞飞-dokcer image 小游戏</title> [root@kub_node2 xiaoniao]# git add . [root@kub_node2 xiaoniao]# git commit -m 'second update' [master 8220d7d] second update 1 file changed, 1 insertion(+), 1 deletion(-) [root@kub_node2 xiaoniao]# git push -u origin master Username for 'http://192.168.0.208': root Password for 'http://root@192.168.0.208': Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 304 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) To http://192.168.0.208/root/xiaoniao.git a76dbc4..8220d7d master -> master Branch master set up to track remote branch master from origin.
4)jenkins重新构建
[root@kub_master ~]# ls /opt/myregistry/docker/registry/v2/repositories/xiaoniao/_manifests/tags/
v1 v4 v6
8. k8s集群部署项目
[root@kub_master ~]# kubectl run xiaoniao --image=192.168.0.212:5000/xiaoniao:v1 --replicas=2 --record deployment "xiaoniao" created [root@kub_master ~]# kubectl expose deployment xiaoniao --port=80 --type=NodePort service "xiaoniao" exposed [root@kub_master ~]# kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/xiaoniao 2 2 2 2 16s NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes 192.168.0.1 <none> 443/TCP 2h svc/xiaoniao 192.168.134.84 <nodes> 80:31101/TCP 4s NAME DESIRED CURRENT READY AGE rs/xiaoniao-181838533 2 2 2 16s NAME READY STATUS RESTARTS AGE po/xiaoniao-181838533-7mgq5 1/1 Running 0 16s po/xiaoniao-181838533-ll11d 1/1 Running 0 16s [root@kub_master ~]# curl 192.168.0.212:31101 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta id="viewport" name="viewport" content="width=device-width,user-scalable=no" /> <script type="text/javascript" src="21.js"></script> <title>小鸟飞飞飞-文章库小游戏</title> <style type="text/css"> body { margin:0px; } </style> <script language=javascript> var mebtnopenurl = 'http://www.wenzhangku.com/weixin/'; window.shareData = { "imgUrl": "http://www.wenzhangku.com/weixin/xiaoniaofeifei/icon.png", "timeLineLink": "http://www.wenzhangku.com/weixin/xiaoniaofeifei/", "tTitle": "小鸟飞飞飞-文章库小游戏", "tContent": "从前有一只鸟,飞着飞着就死了。" }; document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { WeixinJSBridge.on('menu:share:appmessage', function(argv) { WeixinJSBridge.invoke('sendAppMessage', { "img_url": window.shareData.imgUrl, "link": window.shareData.timeLineLink, "desc": window.shareData.tContent, "title": window.shareData.tTitle }, function(res) { document.location.href = mebtnopenurl; }) }); WeixinJSBridge.on('menu:share:timeline', function(argv) { WeixinJSBridge.invoke('shareTimeline', { "img_url": window.shareData.imgUrl, "img_width": "640", "img_height": "640", "link": window.shareData.timeLineLink, "desc": window.shareData.tContent, "title": window.shareData.tTitle }, function(res) { document.location.href = mebtnopenurl; }); }); }, false); function dp_submitScore(a,b){ if(a&&b>=a&&b>10){ //alert("新纪录哦!你过了"+b+"关!") dp_share(b) } } function dp_Ranking(){ document.location.href = mebtnopenurl; } function dp_share(t){ document.title = "我玩小鸟飞飞飞过了"+t+"关!你能超过洒家我吗?"; document.getElementById("share").style.display=""; window.shareData.tTitle = document.title; } </script> </head> <body> <div style="text-align:center;"> <canvas id="linkScreen"> 很遗憾,您的浏览器不支持HTML5,请使用支持HTML5的浏览器。 </canvas> </div> <div id="mask_container" align="center" style="width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; display: none; z-index: 100000; background-color: rgb(255, 255, 255);"> <img id="p2l" src="img/p2l.jpg" style="position: absolute;left: 50%;top: 50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)" > </div> <div id=share style="display:none"> <img width=100% src="2000.png" style="position:absolute;top:0;left:0;display:" onclick="document.getElementById('share').style.display='none';"> </div> <div style="display:none;"> 这里加统计 </div> </body> </html>
9. k8s 版本升级和回滚
#版本升级
[root@kub_master ~]# kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v4 deployment "xiaoniao" image updated [root@kub_master ~]# kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v6 deployment "xiaoniao" image updated
#查看历史版本
[root@kub_master ~]# kubectl rollout history deployment xiaoniao deployments "xiaoniao" REVISION CHANGE-CAUSE 1 kubectl run xiaoniao --image=192.168.0.212:5000/xiaoniao:v1 --replicas=2 --record 2 kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v4 3 kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v6
#版本回滚
[root@kub_master ~]# kubectl rollout undo deploy xiaoniao deployment "xiaoniao" rolled back [root@kub_master ~]# kubectl rollout history deployment xiaoniao deployments "xiaoniao" REVISION CHANGE-CAUSE 1 kubectl run xiaoniao --image=192.168.0.212:5000/xiaoniao:v1 --replicas=2 --record 3 kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v6 4 kubectl set image deploy xiaoniao xiaoniao=192.168.0.212:5000/xiaoniao:v4
10. jenkins自动部署应用到k8s
[root@kub_node1 ~]# kubectl -s 192.168.0.212:8080 get nodes NAME STATUS AGE 192.168.0.184 Ready 14d 192.168.0.208 Ready 14d 192.168.0.212 Ready 14d
[root@kub_node2 xiaoniao]# echo "welcome to learn jenkins k8s" >test.html [root@kub_node2 xiaoniao]# cat test.html welcome to learn jenkins k8s [root@kub_node2 xiaoniao]# git add . [root@kub_node2 xiaoniao]# git commit -m 'fourth update' [master 6956c93] fourth update 1 file changed, 1 insertion(+), 1 deletion(-) [root@kub_node2 xiaoniao]# git push -u origin master Username for 'http://192.168.0.208': root Password for 'http://root@192.168.0.208': Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To http://192.168.0.208/root/xiaoniao.git f213a6d..6956c93 master -> master Branch master set up to track remote branch master from origin.
[root@kub_master ~]# kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/xiaoniao 2 2 2 2 28m NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes 192.168.0.1 <none> 443/TCP 3h svc/xiaoniao 192.168.134.84 <nodes> 80:31101/TCP 28m NAME DESIRED CURRENT READY AGE rs/xiaoniao-181838533 0 0 0 28m rs/xiaoniao-273391417 0 0 0 15m rs/xiaoniao-406561480 0 0 0 26m rs/xiaoniao-556376778 0 0 0 26m rs/xiaoniao-706192076 2 2 2 44s NAME READY STATUS RESTARTS AGE po/xiaoniao-706192076-lwk18 1/1 Running 0 44s po/xiaoniao-706192076-nc24j 1/1 Running 0 44s [root@kub_master ~]# curl 192.168.0.212:31101/test.html welcome to learn jenkins k8s
[root@kub_master ~]# kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/xiaoniao 2 2 2 2 28m NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes 192.168.0.1 <none> 443/TCP 3h svc/xiaoniao 192.168.134.84 <nodes> 80:31101/TCP 28m NAME DESIRED CURRENT READY AGE rs/xiaoniao-181838533 0 0 0 28m rs/xiaoniao-273391417 0 0 0 15m rs/xiaoniao-406561480 0 0 0 26m rs/xiaoniao-556376778 0 0 0 26m rs/xiaoniao-706192076 2 2 2 44s NAME READY STATUS RESTARTS AGE po/xiaoniao-706192076-lwk18 1/1 Running 0 44s po/xiaoniao-706192076-nc24j 1/1 Running 0 44s
测试访问
[root@kub_master ~]# curl 192.168.0.212:31101/test.html welcome to learn jenkins k8s
回滚
[root@kub_master ~]# kubectl rollout undo deploy xiaoniao deployment "xiaoniao" rolled back
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示