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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号