一、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]# [email protected]:root/xmls.git
-bash: [email protected]:root/xmls.git: No such file or directory
[root@k8s-node2 test]# git clone [email protected]: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 [email protected]:root/xmls.git
! [rejected] xmzw -> xmzw (non-fast-forward)
error: failed to push some refs to '[email protected]: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 [email protected]: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 [email protected]
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 [email protected]
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 [email protected]:/usr/local/devops/
scp xm_nginx.tar.gz [email protected]:/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 測驗訪問正常

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/523926.html
標籤:其他
上一篇:游戲開發中的狀態機模式原理與應用
