主頁 >  其他 > Kubernetes筆記(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自動化部署實踐(干貨分享!)

Kubernetes筆記(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自動化部署實踐(干貨分享!)

2020-09-13 00:24:09 其他

通過前面兩篇文章,我們已經有了一個“嗷嗷待哺”的K8s集群環境,也對相關的概念與組件有了一個基本了解(前期對概念有個印象即可,因為只有實踐了才能對其有深入理解,所謂“紙上得來終覺淺,絕知此事要躬行”),本文從實踐角度介紹如何結合我們常用的Gitlab與Jenkins,通過K8s來實作專案的自動化部署,示例將包括基于SpringBoot的服務端專案與基于Vue.js的Web專案,

本文涉及到的工具與技術包括:

  • Gitlab —— 常用的源代碼管理系統
  • Jenkins, Jenkins Pipeline —— 常用的自動化構建、部署工具,Pipeline以流水線的方式將構建、部署的各個步驟組織起來
  • Docker,Dockerfile —— 容器引擎,所有應用最終都要以Docker容器運行,Dockerfile是Docker鏡像定義檔案
  • Kubernetes —— Google開源的容器編排管理系統
  • Helm —— Kubernetes的包管理工具,類似Linux的yum,apt,或Node的npm等包管理工具,能將Kubernetes中的應用及相關依賴服務以包(Chart)的形式組織管理

環境背景:

  1. 已使用Gitlab做原始碼管理,原始碼按不同的環境建立了develop(對應開發環境),pre-release(對應測驗環境),master(對應生產環境)分支
  2. 已搭建了Jenkins服務
  3. 已有Docker Registry服務,用于Docker鏡像存盤(基于Docker Registry或Harbor自建,或使用云服務,本文使用阿里云容器鏡像服務)
  4. 已搭建了K8s集群

預期效果:

  1. 分環境部署應用,開發環境、測驗環境、生產環境分開來,部署在同一集群的不同namespace,或不同集群中(比如開發測驗部署在本地集群的不同namespace中,生產環境部署在云端集群)
  2. 配置盡可能通用化,只需要通過修改少量組態檔的少量配置屬性,就能完成新專案的自動化部署配置
  3. 開發測驗環境在push代碼時自動觸發構建與部署,生產環境在master分支上添加版本tag并且push tag后觸發自動部署
  4. 整體互動流程如下圖

jenkins-cicd

專案組態檔

首先我們需要在專案的根路徑中添加一些必要的組態檔,如下圖所示

springboot-ci-structure

包括:

  1. Dockerfile檔案,用于構建Docker鏡像的檔案(參考 Docker筆記(十一):Dockerfile詳解與最佳實踐)
  2. Helm相關組態檔,Helm是Kubernetes的包管理工具,可以將應用部署相關的Deployment,Service,Ingress等打包進行發布與管理(Helm的具體介紹我們后面再補充)
  3. Jenkinsfile檔案,Jenkins的pipeline定義檔案,定義了各個階段需執行的任務

Dockerfile

在專案根目錄中添加一個Dockerfile檔案(檔案名就叫Dockerfile),定義如何構建Docker鏡像,以Spring Boot專案為例,

FROM frolvlad/alpine-java:jdk8-slim
#在build鏡像時可以通過 --build-args profile=xxx 進行修改
ARG profile
ENV SPRING_PROFILES_ACTIVE=${profile}
#專案的埠
EXPOSE 8000 
WORKDIR /mnt

#修改時區
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk add --no-cache tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata \
    && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache

COPY ./target/your-project-name-1.0-SNAPSHOT.jar ./app.jar
ENTRYPOINT ["java", "-jar", "/mnt/app.jar"]

將SPRING_PROFILES_ACTIVE通過引數profile暴露出來,在構建的時候可以通過 --build-args profile=xxx 來進行動態設定,以滿足不同環境的鏡像構建要求,

SPRING_PROFILES_ACTIVE本可以在Docker容器啟動時通過docker run -e SPRING_PROFILES_ACTIVE=xxx來設定,因這里使用Helm進行部署不直接通過docker run運行,因此通過ARG在鏡像構建時指定

Helm組態檔

Helm是Kubernetes的包管理工具,將應用部署相關的Deployment,Service,Ingress等打包進行發布與管理(可以像Docker鏡像一樣存盤于倉庫中),如上圖中Helm的組態檔包括:

helm                                    - chart包的目錄名
├── templates                           - k8s配置模版目錄
│   ├── deployment.yaml                 - Deployment配置模板,定義如何部署Pod
│   ├── _helpers.tpl                    - 以下劃線開頭的檔案,helm視為公共庫定義檔案,用于定義通用的子模版、函式、變數等
│   ├── ingress.yaml                    - Ingress配置模板,定義外部如何訪問Pod提供的服務,類似于Nginx的域名路徑配置
│   ├── NOTES.txt                       - chart包的幫助資訊檔案,執行helm install命令成功后會輸出這個檔案的內容
│   └── service.yaml                    - Service配置模板,配置訪問Pod的服務抽象,有NodePort與ClusterIp等
|── values.yaml                         - chart包的引陣列態檔,各模版檔案可以參考這里的引數
├── Chart.yaml                          - chart定義,可以定義chart的名字,版本號等資訊
├── charts                              - 依賴的子包目錄,里面可以包含多個依賴的chart包,一般不存在依賴,我這里將其洗掉了

我們可以在Chart.yaml中定義每個專案的chart名稱(類似安裝包名),如

apiVersion: v2
name: your-chart-name
description: A Helm chart for Kubernetes

type: application
version: 1.0.0
appVersion: 1.16.0

在values.yaml中定義模板檔案中需要用到的變數,如

#部署Pod的副本數,即運行多少個容器
replicaCount: 1
#容器鏡像配置
image:
  repository: registry.cn-hangzhou.aliyuncs.com/demo/demo
  pullPolicy: Always
  # Overrides the image tag whose default is the chart version.
  tag: "dev"
#鏡像倉庫訪問憑證
imagePullSecrets:
  - name: aliyun-registry-secret
#覆寫啟動容器名稱
nameOverride: ""
fullnameOverride: ""
#容器的埠暴露及環境變數配置
container:
  port: 8000
  env: []
#ServiceAccount,默認不創建
serviceAccount:
  # Specifies whether a service account should be created
  create: false
  # Annotations to add to the service account
  annotations: {}
  name: ""

podAnnotations: {}

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000
#使用NodePort的service,默認為ClusterIp
service:
  type: NodePort
  port: 8000
#外部訪問Ingress配置,需要配置hosts部分
ingress:
  enabled: true
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: demo.com
      paths: ["/demo"]
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

  #.... 省略了其它默認引數配置

這里在默認生成的基礎上添加了container部分,可以在這里指定容器的埠號而不用去改模板檔案(讓模板檔案在各個專案通用,通常不需要做更改),同時添加env的配置,可以在helm部署時往容器里傳入環境變數,將Service type從默認的ClusterIp改為了NodePort,部署同型別的不同專案時,只需要根據專案情況配置Chart.yaml與values.yaml兩個檔案的少量配置項,templates目錄下的模板檔案可直接復用,

部署時需要在K8s環境中從Docker鏡像倉庫拉取鏡像,因此需要在K8s中創建鏡像倉庫訪問憑證(imagePullSecrets)

# 登錄Docker Registry生成/root/.docker/config.json檔案
sudo docker login --username=your-username registry.cn-shenzhen.aliyuncs.com
# 創建namespace develop(我這里是根據專案的環境分支名稱建立namespace)
kubectl create namespace develop
# 在namespace develop中創建一個secret
kubectl create secret generic aliyun-registry-secret --from-file=.dockerconfigjson=/root/.docker/config.json  --type=kubernetes.io/dockerconfigjson --namespace=develop

Jenkinsfile

Jenkinsfile是Jenkins pipeline組態檔,遵循Groovy語法,對于Spring Boot專案的構建部署, 撰寫Jenkinsfile腳本檔案如下,

image_tag = "default"  //定一個全域變數,存盤Docker鏡像的tag(版本)
pipeline {
    agent any
    environment {
        GIT_REPO = "${env.gitlabSourceRepoName}"  //從Jenkins Gitlab插件中獲取Git專案的名稱
        GIT_BRANCH = "${env.gitlabTargetBranch}"  //專案的分支
        GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()  //commit id或tag名稱
        DOCKER_REGISTER_CREDS = credentials('aliyun-docker-repo-creds') //docker registry憑證
        KUBE_CONFIG_LOCAL = credentials('local-k8s-kube-config')  //開發測驗環境的kube憑證
        KUBE_CONFIG_PROD = "" //credentials('prod-k8s-kube-config') //生產環境的kube憑證

        DOCKER_REGISTRY = "registry.cn-hangzhou.aliyuncs.com" //Docker倉庫地址
        DOCKER_NAMESPACE = "your-namespace"  //命名空間
        DOCKER_IMAGE = "${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/${GIT_REPO}" //Docker鏡像地址

        INGRESS_HOST_DEV = "dev.your-site.com"    //開發環境的域名
        INGRESS_HOST_TEST = "test.your-site.com"  //測驗環境的域名
        INGRESS_HOST_PROD = "prod.your-site.com"  //生產環境的域名
    }
    parameters {
        string(name: 'ingress_path', defaultValue: '/your-path', description: '服務背景關系路徑')
        string(name: 'replica_count', defaultValue: '1', description: '容器副本數量')
    }

    stages {
        stage('Code Analyze') {
            agent any
            steps {
               echo "1. 代碼靜態檢查"
            }
        }
        stage('Maven Build') {
            agent {
                docker {
                    image 'maven:3-jdk-8-alpine'
                    args '-v $HOME/.m2:/root/.m2'
                }
            }
            steps {
                echo "2. 代碼編譯打包"
                sh 'mvn clean package -Dfile.encoding=UTF-8 -DskipTests=true'
            }
        }
        stage('Docker Build') {
            agent any
            steps {
                echo "3. 構建Docker鏡像"
                echo "鏡像地址: ${DOCKER_IMAGE}"
                //登錄Docker倉庫
                sh "sudo docker login -u ${DOCKER_REGISTER_CREDS_USR} -p ${DOCKER_REGISTER_CREDS_PSW} ${DOCKER_REGISTRY}"
                script {
                    def profile = "dev"
                    if (env.gitlabTargetBranch == "develop") {
                        image_tag = "dev." + env.GIT_TAG
                    } else if (env.gitlabTargetBranch == "pre-release") {
                        image_tag = "test." + env.GIT_TAG
                        profile = "test"
                    } else if (env.gitlabTargetBranch == "master"){
                        // master分支則直接使用Tag
                        image_tag = env.GIT_TAG
                        profile = "prod"
                    }
                    //通過--build-arg將profile進行設定,以區分不同環境進行鏡像構建
                    sh "docker build  --build-arg profile=${profile} -t ${DOCKER_IMAGE}:${image_tag} ."
                    sh "sudo docker push ${DOCKER_IMAGE}:${image_tag}"
                    sh "docker rmi ${DOCKER_IMAGE}:${image_tag}"
                }
            }
        }
        stage('Helm Deploy') {
            agent {
                docker {
                    image 'lwolf/helm-kubectl-docker'
                    args '-u root:root'
                }
            }
            steps {
                echo "4. 部署到K8s"
                sh "mkdir -p /root/.kube"
                script {
                    def kube_config = env.KUBE_CONFIG_LOCAL
                    def ingress_host = env.INGRESS_HOST_DEV
                    if (env.gitlabTargetBranch == "pre-release") {
                        ingress_host = env.INGRESS_HOST_TEST
                    } else if (env.gitlabTargetBranch == "master"){
                        ingress_host = env.INGRESS_HOST_PROD
                        kube_config = env.KUBE_CONFIG_PROD
                    }
                    sh "echo ${kube_config} | base64 -d > /root/.kube/config"
                    //根據不同環境將服務部署到不同的namespace下,這里使用分支名稱
                    sh "helm upgrade -i --namespace=${env.gitlabTargetBranch} --set replicaCount=${params.replica_count} --set image.repository=${DOCKER_IMAGE} --set image.tag=${image_tag} --set nameOverride=${GIT_REPO} --set ingress.hosts[0].host=${ingress_host} --set ingress.hosts[0].paths={${params.ingress_path}} ${GIT_REPO} ./helm/"
                }
            }
        }
    }
}

Jenkinsfile定義了整個自動化構建部署的流程:

  1. Code Analyze,可以使用SonarQube之類的靜態代碼分析工具完成代碼檢查,這里先忽略
  2. Maven Build,啟動一個Maven的Docker容器來完成專案的maven構建打包,掛載maven本地倉庫目錄到宿主機,避免每次都需要重新下載依賴包
  3. Docker Build,構建Docker鏡像,并推送到鏡像倉庫,不同環境的鏡像通過tag區分,開發環境使用dev.commitId的形式,如dev.88f5822,測驗環境使用test.commitId,生產環境可以將webhook事件設定為tag push event,直接使用tag名稱
  4. Helm Deploy,使用helm完成新專案的部署,或已有專案的升級,不同環境使用不同的引數配置,如訪問域名,K8s集群的訪問憑證kube_config等

Jenkins配置

Jenkins任務配置

在Jenkins中創建一個pipeline的任務,如圖

jenkins-pipeline-pro

配置構建觸發器,將目標分支設定為develop分支,生成一個token,如圖

jenkins-pipeline-config1

記下這里的“GitLab webhook URL”及token值,在Gitlab配置中使用,

配置流水線,選擇“Pipeline script from SCM”從專案原始碼中獲取pipeline腳本檔案,配置專案Git地址,拉取原始碼憑證等,如圖

jenkins-pipeline-config2.png

保存即完成了專案開發環境的Jenkins配置,測驗環境只需將對應的分支修改為pre-release即可

Jenkins憑據配置

在Jenkinsfile檔案中,我們使用到了兩個訪問憑證——Docker Registry憑證與本地K8s的kube憑證,

DOCKER_REGISTER_CREDS = credentials('aliyun-docker-repo-creds') //docker registry憑證
KUBE_CONFIG_LOCAL = credentials('local-k8s-kube-config')  //開發測驗環境的kube憑證

這兩個憑證需要在Jenkins中創建,

添加Docker Registry登錄憑證,在Jenkins 憑據頁面,添加一個用戶名密碼型別的憑據,如圖

jenkins-cred

jenkins-cred2

添加K8s集群的訪問憑證,在master節點上將/root/.kube/config檔案內容進行base64編碼,

base64 /root/.kube/config > kube-config-base64.txt
cat kube-config-base64.txt

使用編碼后的內容在Jenkins中創建一個Secret text型別的憑據,如圖

jenkins-cred3

在Secret文本框中輸入base64編碼后的內容,

Gitlab配置

在Gitlab專案的 Settings - Integrations 頁面配置一個webhook,在URL與Secret Token中填入前面Jenkins觸發器部分的“GitLab webhook URL”及token值,選中“Push events”作為觸發事件,如圖

gitlab-webhook-config

開發、測驗環境選擇“Push events”則在開發人員push代碼,或merge代碼到develop,pre-release分支時,就會觸發開發或測驗環境的Jenkins pipeline任務完成自動化構建;生產環境選擇“Tag push events”,在往master分支push tag時觸發自動化構建,如圖為pipeline構建視圖

jenkins-build

總結

本文介紹使用Gitlab+Jenkins Pipeline+Docker+Kubernetes+Helm來實作Spring Boot專案的自動化部署,只要稍加修改即可應用于其它基于Spring Boot的專案(具體修改的地方在原始碼的Readme檔案中說明),

本文涉及的所有組態檔(包括基于Spring Boot的服務端專案與基于Vue.js的Web專案)可在原始碼專案中獲取(原始碼地址獲取辦法:關注公眾號“半路雨歌”,首頁輸入“k8sops”即可),

原文地址:http://blog.jboost.cn/k8s3-cd.html


作者:雨歌
歡迎關注作者微信公眾號:半路雨歌,一起學習成長

微信公眾號

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18070.html

標籤:其他

上一篇:關于docker常用指令

下一篇:大咖集結 | ServerlessDays · China 大會嘉賓陣容曝光

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more