jenkins连接docker-harbor的认证

jenkins2.328配置连接docker-harbor2.4的认证,将编译构建的镜像推送到docker-harbor仓库

1.搭建docker-harbor2.4.2有用户名和密码认证并创建一个私有仓库service下:

https://192.168.39.133/harbor/projects 或: https://reg.shi.com/ admin/Harbor12345

2.搭建jenkins2.328(admin/123456)

3.jenkins创建pipeline任务并配置能连接docker-harbor的认证,从而将编译构建的镜像推送到docker-harbor仓库

1)jenkins通过添加凭据,保存连接docker-harbor的用户名和密码并自动生成docker-auth的ID值:

系统管理——凭据—— ID设置为: dockerHub

2)jenkins使用pipeline语法生成连接docker-harbor的语法语句:(通过上面的连接docker-harbor的凭据,将用户名和密码保存到自定义的变量中,如下:用户名保存在username中,密码保存在password中)

输入自定义的变量username和password后,点击生成语法,即可使用凭据将用户名和密码分别保存在username和password变量中了,生成的最终语法是:(后面将该语法修改后,粘贴到pipeline脚本中)

withCredentials([usernamePassword(credentialsId: 'gitlab-user-pass', passwordVariable: 'password', usernameVariable: 'username')]) {

// some block

}

3)jenkins中添加镜像仓库地址

# vim /etc/docker/daemon.json

{

"graph": "/data/docker",

"insecure-registries":["https://b9pmyelo.mirror.aliyuncs.com","https://192.168.38.133","https://reg.shi.com"]

}

# systemctl daemon-reload && systemctl restart docker

4)jenkins中修改任务的pipeline语法(和docker-harbor认证相关的部分)

// project: crm系统所有java 服务

pipeline {

//构建终端

agent any

//构建参数

parameters {

// 构建公司

choice(name: 'DEPLOY_COUNTRY', choices: ['zxca-dev','zqap-dev','szgk-dev','tq-dev'], description: '部署国家: zxca-dev、zqap-dev、szgk-dev')

// 构建动作

choice(name: 'DEPLOY_ACTION', choices: ['deploy','rollback'], description: '动作: 部署或回滚')

// 分支名称

string(name: 'DEPLOY_BRANCH_NAME', defaultValue: 'origin/test', description: '输入分支', trim: true)

// 镜像TAG

string(name: 'IMAGE_TAG', defaultValue: 'none', description: "动作为rollback时,填写回滚的目标镜像的TAG", trim: true)

}

// 环境变量

environment {

//项目名称

PROJECT_NAME = 'dev-cchyzb-server'

// 需要构建的服务列表

SERVICE_LIST = "${params.SERVICE_LIST}"

//项目git地址

PROJECT_GIT_ADDRESS = "https://ali-gitlab.zqapedu.com/teaching/server/cchyzb.git"

// DEV 编译参数,根据需要使用

DEV_BUILD_PARAMETERS = '/usr/local/apache-maven-3.8.1/bin/mvn clean install -Dmaven.test.skip=true'

// 构建生成 jar 包路径,根据具体路径修改

//BUILD_JAR_PATH = "admin/build/libs/${PROJECT_NAME}.jar"

// jenkins 凭据

JENKINS_CRENTIALSID = 'gitlab-user-pass'

// docker 镜像仓库地址

IMAGE_PATH = 'service'

DOCKER_REGISTRY_ADDRESS = 'reg.shi.com'

// jenkins 登录镜像仓库凭据

DOCKER_REGISTRY_CRENTIALSID = 'dockerHub'

// 镜像tag

IMAGE_TAG = "${params.IMAGE_TAG}"

}

//调用工具(调用的工具命令)

//tools {

// jdk "jdk-18"

// gradle 'gradle-6.3'

//}

stages {

//拉取项目代码

stage('拉取项目代码') {

when {

expression {

"${params.DEPLOY_ACTION}" == 'deploy'

}

}

// 配置拉取代码超时时间

options {

timeout(time: 5, unit: 'MINUTES')

}

// 拉取代码

steps {

echo "拉取项目代码"

checkout(

[

$class: 'GitSCM', branches: [[name: "${params.DEPLOY_BRANCH_NAME}"]],

userRemoteConfigs: [

[credentialsId: "${JENKINS_CRENTIALSID}",url: "${PROJECT_GIT_ADDRESS}"]

]

]

)

}

}

//编译代码

stage('编译代码') {

when {

expression {

"${params.DEPLOY_ACTION}" == 'deploy'

}

}

steps {

echo "------编译代码------"

// sh "java -version"

script {

// 获取 commit_id

COMMIT_ID = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()


//编译代码

sh "${DEV_BUILD_PARAMETERS}"

}

}

}

//构建镜像

stage('构建Docker镜像') {

when {

expression {

"${params.DEPLOY_ACTION}" == 'deploy'

}

}

stages {

//拉取Dockerfile文件

//stage('Pull Dockerfile') {

// 配置拉取代码超时时间为5分钟

// options {

// timeout(time: 5, unit: 'MINUTES')

// }

// steps {

// echo "------拉取 Dockerfile------"

// dir("${PIPELINE_PATH}") {

// checkout(

// [

// $class: 'GitSCM', branches: [[name: "master"]],

// userRemoteConfigs: [

// [credentialsId: "${JENKINS_CRENTIALSID}", url: "${DOCKERFILE_GIT_ADDRESS}"]

// ]

// ]

// )

// }

// }

//}

//构建镜像

stage('Build Image') {

steps {

echo "------构建镜像------"

dir("${env.WORKSPACE}") {

script {

IMAGE_TAG = "${params.DEPLOY_BRANCH_NAME}-${COMMIT_ID}"

IMAGE_TAG = IMAGE_TAG.replaceAll('/','-')

IMAGE_TAG = IMAGE_TAG.replaceAll('.','-')

}

// 将 Dockerfile 文件拷贝到项目根目录

//sh """

// cp -ra ${PIPELINE_PATH}/${JENKINSFILE_PATH}/Dockerfile .

// rm -rf .gitignore

//"""

sh """

cp -ra ${env.WORKSPACE}/cchyzb-program-server/target/cchyzb-program-server.jar .

cp -ra /tmp/Dockerfile .

"""

script {

// 构建镜像

echo "------构建 ${PROJECT_NAME} 镜像------"

withCredentials([usernamePassword(credentialsId: "${DOCKER_REGISTRY_CRENTIALSID}", passwordVariable: 'password', usernameVariable: 'username')]) {

sh """

docker build --pull -t ${DOCKER_REGISTRY_ADDRESS}/${IMAGE_PATH}/${PROJECT_NAME}:${IMAGE_TAG} . --build-arg PROJECT_NAME=cchyzb --build-arg JAR_NAME=cchyzb-program-server.jar --build-arg SERVER_PORT=9560 --build-arg PROFILE_ACTIVE=dev

docker login -u ${username} -p '${password}' ${DOCKER_REGISTRY_ADDRESS}

docker push ${DOCKER_REGISTRY_ADDRESS}/${IMAGE_PATH}/${PROJECT_NAME}:${IMAGE_TAG}

"""

}

}

}

}

}

}

}

}

}

5)jenkins中创建pipeline任务,编译构建镜像,登录镜像仓库,推送到镜像仓库

展开阅读全文

页面更新:2024-03-11

标签:凭据   户名   变量   分支   语法   仓库   密码   代码   地址   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top