Gitlab+Jenkins+Docker+K8S實現CI/CD


Gitlab+Jenkins+Docker+K8S實現CI/CD

使用Docker安裝GitLab及Jenkins

下載安裝gitlab鏡像
# 下載gitlab鏡像文件
$ docker pull gitlab/gitlab-ce:latest
# 啟動gitlab
$ docker run -d \
             --hostname HOST_NAME \
             -p 9443:443 -p 9080:80 -p 2222:22 \
             --name gitlab \
             -v PATH/config:/etc/gitlab \
             -v PATH/logs:/var/log/gitlab \
             -v PATH/data:/var/opt/gitlab \
             gitlab/gitlab-ce:latest


# 修改PATH/config/gitlab.rb
$  cat PATH/config/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# 重啟gitlab容器
$ docker stop gitlab
$ docker rm gitlab
$ docker run -d \
             --hostname HOST_NAME \
             -p 9443:443 -p 9080:80 -p 2222:22 \
             --name gitlab \
             -v PATH/config:/etc/gitlab \
             -v PATH/logs:/var/log/gitlab \
             -v PATH/data:/var/opt/gitlab \
             gitlab/gitlab-ce:latest
下載安裝Jenkins
# 下載jenkins鏡像
$ docker pull jenkins
# 啟動jenkins
$ docker run -d \
             -p 8080:8080 \
             -p 50000:50000 \
             -v PATH/jenkins-data:/var/jenkins_home \
             -v /var/run/docker.sock:/var/run/docker.sock \
             --name jenkins \
             jenkins:latest
Jenkins安全設置
1. 點擊“系統管理” - 進入“全局安全配置”
2. 在“訪問控制”-“授權策略”-“登錄用戶可以做任何事”中勾選上“匿名用戶具有可讀權限”
3. 去掉"CSRF Protection"中的"防止跨站點請求偽造"
gitlab添加jenkins服務器及git服務器SSH KEYS
jenkins編寫流水線腳本
# 構建流水線腳本
#!groovy
pipeline {
	agent any
	environment {
		REPOSITORY="ssh://git@gitlab.hadeian.com:2222/hadeian/microservice.git"
		MODULE="user-edge-service"
		SCRIPT_PATH="~/scripts"
	}
	stages {
		stage('獲取代碼') {
			steps {
				echo "start fetch from git:${REPOSITORY}"
				deleteDir()
				git "${REPOSITORY}"
			}
		}
		stage('編譯+單元測試') {
			steps {
				echo "start compile"
				sh "mvn -U -pl ${MODULE} -am clean package"
			}
		}
		stage('構建鏡像') {
			steps {
				echo "start build image"
				sh "${SCRIPT_PATH}/build-image.sh ${MODULE}"
			}
		}
		stage('發布服務') {
			steps {
				echo "start deploy"
				sh "${SCRIPT_PATH}/deploy.sh user-edge-service ${MODULE}"
			}
		}
	}
}

  

 遠程執行編譯腳本
$ cat build-image.sh
#!/bin/bash
MODULE=$1
TIME=`date "+%Y%m%d%H%M"`
GIT_VERSION=`git log -1 --pretty=format:"%h"`
IMAGE_NAME=DOCKER_REGISTRY/PRODUCT_NAME/${MODULE}:${TIME}_${GIT_VERSION}
cd ${MODULE}
docker build -t ${IMAGE_NAME} .
cd -
docker push ${IMAGE_NAME}
echo "${IMAGE_NAME}" > IMAGE_NAME

# 編寫K8S更新服務腳本
$ cat deploy.sh
#!/bin/bash
IMAGE=`cat IMAGE_NAME`
DEPLOYMENT=$1
MODULE=$2
kubectl set image deployment/${DEPLOYMENT} ${MODULE}=${IMAGE}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM