日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jenkins流水线打包微服务构建docker镜像运行

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins流水线打包微服务构建docker镜像运行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前提:
1.已安裝Harbor。
2.已安裝Jenkins,已配置相關環境,如Maven、JDK等。
3.微服務項目已經推送到遠程倉庫(我這里是推送到了gitee)。

操作流程如下

1.新建任務

2.參數構建
點擊spring-cloud-dev,接著進入配置





這時候可以看到構建參數如下

3.配置微服務
打開編譯工具IDEA,項目結構如下,現只構建兩個子服務cloud-zuul和cloud-admin

在項目根目錄下放置Jenkinsfile文件,在子服務cloud-zuul和cloud-admin根目錄下分別放置Dockerfile文件,文件內容如下:
cloud-zuul

FROM openjdk:8 ARG JAR_FILE COPY ${JAR_FILE} cloud-zuul.jar EXPOSE 10006 ENTRYPOINT ["java","-jar","cloud-zuul.jar"]

cloud-admin

FROM openjdk:8 ARG JAR_FILE COPY ${JAR_FILE} cloud-admin.jar # 掛載目錄到主機 VOLUME ["/root/ghyProjectUpload/synthesiscloud"] EXPOSE 10008 ENTRYPOINT ["java","-jar","cloud-admin.jar"]

注意:端口保持一致

Jenkinsfile

def project_url = "https://gitee.com/***/synthesis-cloud.git" def gitlab_auth = "z***" def tag = "latest" def harbor_url = "192.168.*.*:9999" def harbor_project_name = "sysnthesis-cloud-dev" def imageName = "${project_name}:${tag}" node {def mvnHomestage('pull') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [],userRemoteConfigs: [[credentialsId: "${gitlab_auth}", url: "${project_url}"]]])}stage('structure') {sh "mvn -f cloud-common clean install"sh "mvn -f cloud-feign clean install"}stage('pack') {sh "mvn -f ${project_name} clean package dockerfile:build"sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"}stage('uploading') {withCredentials([usernamePassword(credentialsId: '6c0f72aa-fab4-4be4-8889-*****', passwordVariable: 'password', usernameVariable: 'username')]) {sh "docker login -u ${username} -p ${password} ${harbor_url}"sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"sh "echo 鏡像上傳成功"}}stage('issue') {sshPublisher(publishers: [sshPublisherDesc(configName: 'sysnthesis-cloud', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/root/sh/sysnthesiscloud/deploy.sh $harbor_url $harbor_project_name $project_name $tag $port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])} }

參數具體含義如下

def project_url = "項目git網址" def gitlab_auth = "全局憑證ID" def tag = "構建版本的名稱" def harbor_url = "Harboor私服地址" def harbor_project_name = "Harbor的項目名稱" def imageName = "定義鏡像名稱" node {def mvnHomestage('拉取代碼') { // 在流水線語法中選擇checkout:Check out from version control,可得到此步驟腳本checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [],userRemoteConfigs: [[credentialsId: "${gitlab_auth}",url: "${project_url}"]]])}stage('公共構建代碼') {sh "mvn -f cloud-common clean install"sh "mvn -f cloud-feign clean install"}stage('打包微服務工程') {//編譯,構建本地鏡像;這個步驟要導入鏡像包sh "mvn -f ${project_name} clean package dockerfile:build"//給鏡像打標簽sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"}stage('鏡像上傳') {//在流水線語法中選擇withCredentials:Bind credentials to variables生成,生成前選擇Username and password(separated) 變量取username passwordwithCredentials([usernamePassword(credentialsId: '6c0f72aa-fab4-4be4-8889-*****', passwordVariable: 'password', usernameVariable: 'username')]) {//登錄sh "docker login -u ${username} -p ${password} ${harbor_url}"//上傳鏡像sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"sh "echo 鏡像上傳成功"}}stage('遠程發布') {//找到流水線語法sshPublisher:send bulid artifacts over ssh,其它的不管;execCommand中為deployy.sh腳本路徑sshPublisher(publishers: [sshPublisherDesc(configName: 'sysnthesis-cloud', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/root/projectReleased/sysnthesiscloud/deploy.sh $harbor_url $harbor_project_name $project_name $tag $port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])} }

以上為流水線語法,可在Jenkins中生成

具體操作如下:

拉取代碼

點擊生成流水線腳本,粘貼到Jenkinsfile即可用,我這里是將參數提取了出來,賦予變量,以便于后續配置更改。

公共構建代碼

stage('公共構建代碼') {sh "mvn -f cloud-common clean install"sh "mvn -f cloud-feign clean install" }

此處cloud-common和cloud-feign為公共構建模塊

打包微服務工程
… …

鏡像上傳

此處憑據由Harbor登錄賬號密碼生成
需要在Jenkins添加Harbor用戶憑證:
點擊系統管理 -> Manage Credentials

遠程發布


/root/projectReleased/sysnthesiscloud/deploy.sh 這個路徑指向是一個腳本文件,用于操作docker容器的,這個腳本提供在下面
$harbor_url 鏡像私有倉庫地址
$harbor_project_name 私有倉庫中的項目名
$project_name 項目名
$tag 拉取鏡像的版本
$port 這個參數還需要額外在Jenkins構建,是提供參數
這幾個參數與線面這個文件中的參數$1,$2,$3,$4,$5是一一對應的:
deploy.sh

#!/bin/bash harbor_url=$1 harbor_project_name=$2 project_name=$3 tag=$4 port=$5imageName=$harbor_url/$harbor_project_name/$project_name:$tagecho "$imageName"containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'` if [ "$containerId" != "" ] ; thendocker stop $containerIddocker rm $containerIdecho "成功刪除容器" fiimageId=`docker images | grep -w $project_name | awk '{print $3}'` if [ "$imageId" != "" ] ; thendocker rmi -f $imageIdecho "刪除成功" fidocker login -u admin -p 123456 $harbor_urldocker pull $imageNamedocker run -di -p $port:$port $imageName # docker run -di -p $port:$port --net=host $imageName echo "啟動成功"

docker login -u admin -p 123456 $harbor_url:此命令為登錄harbor
admin和123456為登錄harbor的賬號密碼

此腳本的作用是下拉harbor的鏡像進行構建docker容器,我們提交代碼后,點擊開始構建,會先判斷服務器上是否存在同名的鏡像和容器,存在即先刪除再下拉harbor上的鏡像并運行。

放置位置:

Harbor使用情況如下:

4.構建項目


以上為構建成功的界面,在我們嘗試構建的過程中可以一步一步構建,先在Jenkinsfile只保留pull的腳本,然后提交代碼進行構建,成功了再進行下一步,添加上structure的腳本再提交代碼進行構建,以此類推,方便于查找錯誤。

5.查看鏡像與容器運行情況

此時鏡像已經成功生成且正常運行對應容器
接著查看容器日志,即可知道項目是否正常的跑起來

或者通過訪問項目接口查看

over~

總結

以上是生活随笔為你收集整理的Jenkins流水线打包微服务构建docker镜像运行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。