一、Jenkins配置
1.1、pipeline插件安裝
二、拉取git代碼
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo "1.克隆git倉庫代碼"
git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
}
echo "${build_tag}"
}
}
}
}
三、Maven打包spring項目
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo "1.克隆git倉庫代碼"
git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
}
echo "${build_tag}"
}
}
stage('Maven Build') {
steps {
echo "2.Maven 打包項目"
sh "mvn --version"
sh 'pwd'
sh 'mvn clean package -DskipTests'
echo '構(gòu)建完成'
}
}
}
}
三、docker構(gòu)建鏡像
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo "1.克隆git倉庫代碼"
git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
}
echo "${build_tag}"
}
}
stage('Maven Build') {
steps {
echo "2.Maven 打包項目"
sh "mvn --version"
sh 'pwd'
sh 'mvn clean package -DskipTests'
echo '構(gòu)建完成'
}
}
stage('Docker Build') {
steps {
echo "3.Docker 構(gòu)造鏡像"
sh "docker -v"
sh 'pwd'
sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/
ls
docker -H tcp://127.0.0.1:80 build -t springbootapp:${build_tag} ."""
}
}
}
}
遇到的問題:
在使用docker build命名的時候,報如下錯誤
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解決方案:
在jenkins 啟動的docker-compose文件中增加如下配置
/var/run/docker.sock:/var/run/docker.sock
四、docker推送鏡像
def servicename = "weaveservice"
node {
stage('Checkout') {
echo "1.克隆git倉庫代碼"
git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
}
echo "${build_tag}"
}
stage('Maven Build') {
echo "2.Maven 打包項目"
sh "mvn --version"
sh 'pwd'
sh 'mvn clean package -DskipTests'
echo '構(gòu)建完成'
}
stage('Docker Build') {
echo "3.Docker 構(gòu)造鏡像"
sh "docker -v"
sh 'pwd'
sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/
ls
docker build -t 127.0.0.1:80/dev/${servicename}:${build_tag} ."""
}
stage('Docker Push') {
echo "4.Docker 推送鏡像"
withCredentials([usernamePassword(credentialsId: "0fbd81ff-a45b-4e8b-9355-a2a5a36438c0", passwordVariable: "password", usernameVariable: "username")]) {
sh "docker login 127.0.0.1:80 -u ${username} -p ${password}"
sh "docker push 127.0.0.1:80/dev/${servicename}:${build_tag}"
}
}
}
遇到的問題:
在使用docker build命令的時候,報如下錯誤
Cannot perform an interactive login from a non TTY device
解決方案:
參考博文Docker、Jenkins、Harbor 構(gòu)建鏡像部署 SpringBoot 項目,先不在jenkins中執(zhí)行,先在宿主機上執(zhí)行是否可以成功,然后在jenkins中編寫對應(yīng)腳本就可以了。
五、kubelctl執(zhí)行
def harborurl = "127.0.0.1:80"
def servicename = "weaveservice"
node {
stage('Checkout') {
echo "1.克隆git倉庫代碼"
git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
}
echo "${build_tag}"
}
stage('Maven Build') {
echo "2.Maven 打包項目"
sh "mvn --version"
sh 'pwd'
sh 'mvn clean package -DskipTests'
echo '構(gòu)建完成'
}
stage('Docker Build') {
echo "3.Docker 構(gòu)造鏡像"
sh "docker -v"
sh 'pwd'
sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/
ls
docker build -t ${harborurl}/dev/${servicename}:${build_tag} ."""
}
stage('Docker Push') {
echo "4.Docker 推送鏡像"
withCredentials([usernamePassword(credentialsId: "0fbd81ff-a45b-4e8b-9355-a2a5a36438c0", passwordVariable: "password", usernameVariable: "username")]) {
sh "docker login ${harborurl} -u ${username} -p ${password}"
sh "docker push ${harborurl}/dev/${servicename}:${build_tag}"
}
}
stage('Deploy') {
echo "5. Deploy Kubernetes"
sh "kubectl version"
sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/
ls
sed -i 's/<PROJECT_NAMESPACE>/app/' k8s.yaml
sed -i 's/<DOCKER_REGISTRY>/${harborurl}/' k8s.yaml
sed -i 's/<PROJECT_NAME>/${servicename}/' k8s.yaml
sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml
kubectl delete -f .
kubectl apply -f k8s.yaml --record
"""
}
}
遇到的問題一:
在使用kubectl version命令的時候,報如下錯誤
Error from server (Forbidden): <html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fswagger-2.0.0.pb-v1%3Ftimeout%3D32s'/><script>window.location.replace('/login?from=%2Fswagger-2.0.0.pb-v1%3Ftimeout%3D32s');</script></head><body style='background-color:white; color:white;'>
Authentication required
<!--
-->
</body></html>
解決方案:
參考博文從 jenkins 容器運行 kubectl 命令,jenkins配置的環(huán)境變量中設(shè)置kubectl 的認證信息
遇到的問題二:
在使用kubectl apply -f k8s.yaml --record命令的拉取鏡像的時候,報如下錯誤
container "weaveservice" in pod "weaveservice-dad798uvdkkd"is waiting pulled
解決方案:
參考博文k8s 1.23 拉取 harbor鏡像失敗,配置好后還是報錯,后面突然發(fā)現(xiàn),pod是在node節(jié)點拉取的鏡像,然后在node節(jié)點的宿主機執(zhí)行docker login 命令,發(fā)現(xiàn)又有如下報錯:文章來源:http://www.zghlxwxcb.cn/news/detail-831761.html
Error response from daemon: Get "https://192.168.1.7:80/v2/": http: server gave HTTP response to HTTPS client
然后參考博文 Docker login 登錄私服,報錯; http: server gave HTTP response to HTTPS client操作后,docker login 命令執(zhí)行成功,鏡像拉取下來之后,pod也就自動啟動了。大功告成?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-831761.html
參考資料
- jenkins流水線部署springboot應(yīng)用到k8s集群(k3s+jenkins+gitee+maven+docker)(2)
- jenkins發(fā)布springboot到k8s
- Jenkins中無法啟動docker daemon的解決和思考
- SpringBoot 應(yīng)用如何部署到 K8S 上?
- jenkins 上的 docker 登錄
- Docker、Jenkins、Harbor 構(gòu)建鏡像部署 SpringBoot 項目
- k8s 1.23 拉取 harbor鏡像失敗
- K8S部署應(yīng)用時從harbor拉取鏡像失敗
- Docker login 登錄私服,報錯; http: server gave HTTP response to HTTPS client
到了這里,關(guān)于Jenkins打包springboot項目到k8s的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!