Artikelverzeichnis
1. WebHooks basierend auf GitLab
Ein hier zu automatisierender Vorgang CI
, das heißt, nachdem der Entwicklercode Push
in das Git
Warehouse gestellt wurde, wird Jenkins
das Projekt automatisch erstellt, und der neueste Übermittlungspunktcode wird erstellt und gepackt und bereitgestellt.Hier werden die obigen CD
Vorgänge unterschieden CD
Betrieb muss auf Basis einer bestimmten Version bereitgestellt werden, und hier wird jedes Mal der neuste Commit-Punkt in den Trunk integriert und getestet.
1.1 WebHooks-Benachrichtigung
Jenkins
Automatische Builds aktiviert :
Auslöser bauen |
---|
Richten Sie die Webhooks von Gitlab ein:
Einrichten der Webhooks von Gitlab |
---|
Die Jenkins- Gitlab
Authentifizierung muss deaktiviert werden:
Deaktivieren Sie die Gitlab-Authentifizierung für Jenkins |
---|
Gitlab erneut testen:
nochmal testen |
---|
1.2 Ändern Sie die Konfiguration
Ändern Sie die Jenkinsfile
Implementierung, um eine kontinuierliche Integration basierend auf dem letzten Commit-Punkt zu erreichen, und entfernen Sie alle vorherigen Verweise auf ${tag}:
// 所有的脚本命令都放在pipeline中
pipeline{
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
harborUser = 'admin'
harborPasswd = 'Harbor12345'
harborAddress = '192.168.11.102:80'
harborRepo = 'repo'
}
stages {
stage('拉取git仓库代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.11.101:8929/root/mytest.git']]])
}
}
stage('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage('通过SonarQube做代码质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701'
}
}
stage('通过Docker制作自定义镜像') {
steps {
sh '''mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:latest ./docker/'''
}
}
stage('将自定义镜像推送到Harbor') {
steps {
sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
docker tag ${JOB_NAME}:latest ${harborAddress}/${harborRepo}/${JOB_NAME}:latest
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:latest '''
}
}
stage('将yml文件传到k8s-master上') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
stage('远程执行k8s-master的kubectl命令') {
steps {
sh '''ssh [email protected] kubectl apply -f /usr/local/k8s/pipeline.yml
ssh [email protected] kubectl rollout restart deployment pipeline -n test'''
}
}
}
post {
success {
dingtalk(
robot: 'Jenkins-DingDing',
type: 'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 成功构建:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
)
}
failure {
dingtalk(
robot: 'Jenkins-DingDing',
type: 'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 构建失败:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
)
}
}
}
Modify pipeline.yml
, ändern Sie die Mirror-Version:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: pipeline
labels:
app: pipeline
spec:
replicas: 2
selector:
matchLabels:
app: pipeline
template:
metadata:
labels:
app: pipeline
spec:
containers:
- name: pipeline
image: 192.168.11.102:80/repo/pipeline:latest # 这里
imagePullPolicy: Always
ports:
- containerPort: 8080
# 省略其他内容…………
1.3 Laufende Updates
Denn pipeline
bei keiner Änderung wird nicht jedes Mal neu geladen, was dazu führt, dass Pod
der Container im Medium nicht dynamisch aktualisiert wird.Der hier zu kubectl
verwendende rollout restart
Befehl ist gescrollt und aktualisiert.
Jenkinsfle einrichten |
---|