草庐IT

gitlab+jenkins+harbor+k8s部署微服务-流水线自动部署

xmwan 2023-03-28 原文

一、gitlab

1.1 登录gitlab创建项目

项目名称等自定义,权限可以选择私有或者公有

1.2 gitlab 代码提交

创建好的项目下复制项目地址

#在gitlab服务器上创建一个目录
[root@k8s-node2 local]# cd test/
[root@k8s-node2 test]# ll
total 0
[root@k8s-node2 test]# pwd
/usr/local/test
[root@k8s-node2 test]# ll -la
total 0
drwxr-xr-x   2 root root   6 Oct 31 09:45 .
drwxr-xr-x. 16 root root 206 Oct 31 09:45 ..
#克隆项目
[root@k8s-node2 test]# git@192.168.198.147:root/xmls.git
-bash: git@192.168.198.147:root/xmls.git: No such file or directory
[root@k8s-node2 test]# git clone git@192.168.198.147:root/xmls.git
Cloning into 'xmls'...
remote: Enumerating objects: 79, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 79 (delta 22), reused 32 (delta 16), pack-reused 35
Receiving objects: 100% (79/79), 104.66 MiB | 11.57 MiB/s, done.
Resolving deltas: 100% (33/33), done.
#项目xmls已经克隆下来
[root@k8s-node2 test]# ll -la
total 0
drwxr-xr-x   3 root root  18 Oct 31 09:47 .
drwxr-xr-x. 16 root root 206 Oct 31 09:45 ..
drwxr-xr-x   3 root root  51 Oct 31 09:47 xmls
[root@k8s-node2 test]# cd xmls/
[root@k8s-node2 xmls]# ll -la
total 8
drwxr-xr-x 3 root root   35 Oct 31 09:48 .
drwxr-xr-x 3 root root   18 Oct 31 09:47 ..
drwxr-xr-x 8 root root  163 Oct 31 09:47 .git
-rw-r--r-- 1 root root 6183 Oct 31 09:47 README.md
#查询分支
[root@k8s-node2 xmls]# git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
#创建xmzw分支
[root@k8s-node2 xmls]# git branch xmzw
[root@k8s-node2 xmls]# git branch -a
* main
  xmzw
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/xmzw
#切换到xmzw分支
[root@k8s-node2 xmls]# git checkout xmzw
D       xmtb.txt
Switched to branch 'xmzw'
[root@k8s-node2 xmls]# git branch -a
  main
* xmzw
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/xmzw
#创建test文件,测试文件上传是否正常
[root@k8s-node2 xmls]# touch test.txt
#给test文件添加标志
[root@k8s-node2 xmls]# git add test.txt 
#添加提交信息
[root@k8s-node2 xmls]# git commit -m "test commit"
[xmzw 6aa912c] test commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
 #提交,第一次提交提示报错。这是因为远程repository和本地的repository有冲突
[root@k8s-node2 xmls]# git push
To git@192.168.198.147:root/xmls.git
 ! [rejected]        xmzw -> xmzw (non-fast-forward)
error: failed to push some refs to 'git@192.168.198.147:root/xmls.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
#解决上面报错,需要先pull拉取远程分支文件,在重新提交即可
[root@k8s-node2 xmls]# git pull origin xmzw
From 192.168.198.147:root/xmls
 * branch            xmzw       -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 Jenkinsfile     |  35 +++++++++++++++++++++++++++++++++++
 copy.sh         |  48 ++++++++++++++++++++++++++++++++++++++++++++++++
 deploy.yaml     |  42 ++++++++++++++++++++++++++++++++++++++++++
 harbor.sh       |  32 ++++++++++++++++++++++++++++++++
 xm_nginx.tar.gz | Bin 0 -> 146217984 bytes
 xmyd.txt        |   3 +++
 6 files changed, 160 insertions(+)
 create mode 100644 Jenkinsfile
 create mode 100644 copy.sh
 create mode 100644 deploy.yaml
 create mode 100644 harbor.sh
 create mode 100644 xm_nginx.tar.gz
 create mode 100644 xmyd.txt
[root@k8s-node2 xmls]# 
[root@k8s-node2 xmls]# 
[root@k8s-node2 xmls]# ll
total 142820
-rw-r--r-- 1 root root      1352 Oct 31 10:01 copy.sh
-rw-r--r-- 1 root root       760 Oct 31 10:01 deploy.yaml
-rw-r--r-- 1 root root       852 Oct 31 10:01 harbor.sh
-rw-r--r-- 1 root root      2272 Oct 31 10:01 Jenkinsfile
-rw-r--r-- 1 root root      6183 Oct 31 09:47 README.md
-rw-r--r-- 1 root root         0 Oct 31 09:52 test.txt
-rw-r--r-- 1 root root 146217984 Oct 31 10:01 xm_nginx.tar.gz
-rw-r--r-- 1 root root        19 Oct 31 10:01 xmyd.txt
#重新提交,可以看到test文件已经成功上传
[root@k8s-node2 xmls]# git push
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 501 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: 
remote: To create a merge request for xmzw, visit:
remote:   http://192.168.198.147/root/xmls/-/merge_requests/new?merge_request%5Bsource_branch%5D=xmzw
remote: 
To git@192.168.198.147:root/xmls.git
   bf35535..5455143  xmzw -> xmzw

二、Jenkins

2.1 Jenkins创建流水线项目

比如创建任务名称:pipeline的流水线项目,点击确定

2.2 项目配置

点击pipeline任务,点击配置

1. 选择scm,配置gitlab仓库地址,这里要复制http的地址。

2. 勾选参数化构建过程,配置版本为传参

3. 点击流水线语法,会自动转换成Jenkins脚本命令

三、流水线部署

3.1 在gitlab上创建一个Jenkins文件

内容如下:

大概流程:从git仓库拉取代码-发送目标服务器-上传镜像到harbor-使用k8s部署业务

pipeline {
    agent any

    stages {
        stage('从git仓库拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/xmzw']], extensions: [], userRemoteConfigs: [[credentialsId: '8f6e9bea-7734-43d8-a6a2-d54e233fa9ff', url: 'http://192.168.198.147/root/xmls.git']]])
                echo 'H从git仓库拉取代码成功'
            }
        }
		stage('发送目标服务器') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '*tar.gz,*sh,*yaml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '发送目标服务器成功'
            }
        }
		stage('上传镜像') {
            steps {
               sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''ssh root@192.168.198.144
cd /usr/local/devops
sh harbor.sh $tag''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '上传镜像成功'
            }
        }
		stage('部署业务') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''ssh root@192.168.198.144
cd /usr/local/devops
kubectl apply -f deploy.yaml
kubectl rollout restart -n my-ns-pipeline deployment my-deploy''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '部署业务成功'
            }
        }
    }
}

3.2 推送镜像的脚本

[root@k8s-node2 xmls]# cat harbor.sh 
#/bin/bash

imageTag=$1


echo > $imageTag


containerName=xm_nginx:${imageTag}
echo containerName: ${containerName}

cd /usr/local/devops
scp xm_nginx.tar.gz root@192.168.198.146:/usr/local/devops/
scp xm_nginx.tar.gz root@192.168.198.147:/usr/local/devops/

imageID=`docker images | grep xm_nginx |grep -v grep| awk '{print $3}'`
hostImageTag=`docker images | grep xm_nginx |grep -v grep| awk '{print $2}'`
echo imageID:$imageID   hostImageTag:$hostImageTag
#删除旧镜像
if [[ "$hostImageTag" =~ "$imageTag" ]] ; then 
  docker rmi -f ${imageID}
  echo "Delete Image ${imageID} Success"
fi
#加载镜像
docker load -i xm_nginx.tar.gz
echo "load Success"
#打标签
docker tag xm_nginx:$imageTag 192.168.198.144:80/xmzw/xm_nginx:latest

docker login 192.168.198.144:80 -u admin -p Harbor12345

docker push 192.168.198.144:80/xmzw/xm_nginx:latest

3.3 业务部署的yaml文件

[root@k8s-node2 xmls]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-deploy
  name: my-deploy
  namespace: my-ns-pipeline
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-deploy
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-deploy
    spec:
      containers:
      - image: 192.168.198.144:80/xmzw/xm_nginx:latest
        imagePullPolicy: Always
        name: xm-nginx-hzsn5
        ports:
        - containerPort: 80
          name: web
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: my-svc
  namespace: my-ns-pipeline
spec:
  ports:
  - port: 8081
    name: http
    targetPort: 80
    nodePort: 31761
  selector:
    app: my-deploy
  type: NodePort

3.4 把deploy.yaml,harbor.sh,Jenkinsfile都同步到gitlab仓库

xm_nginx.tar.gz为Nginx的1.23.1的镜像包,网上下载一个即可

3.5 gitlab上创建tag

3.6 构建

选择1.23.1,点击构建

成功构建

 

3.7 测试访问正常

 

有关gitlab+jenkins+harbor+k8s部署微服务-流水线自动部署的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  4. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  5. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  8. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  9. ruby - 将 Gitlab 从 9.3.7 更新到 9.3.8 安装 re2 时出错 - 2

    我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(

  10. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

随机推荐