使用Gitee+jenkins+harbor+docker实现基本CICD操作
Gitee操作
1、
将dockerfile和jenkinsfile 放在项目的同级目录,并且对master分支创建一个标签V5.0.0,以便之后jenkins可以基于tag便签构建
2、dockerfile
jenkinsfile
//jenkins集成docker部署java项目
pipeline {
agent {label 'master'}
tools{
maven 'maven'
}
environment {
GIT_PROJECT_ADDR="https://gitee.com/shentaotest/cimp.git" //项目的git地址
JENKINS_WORKSPACE="/root/.jenkins/workspace" //jenkins存放文件的地址
PROJECT_NAME="${JOB_NAME}" // 项目名
JAR_NAME="redis-0.0.1-SNAPSHOT.jar" // 项目生成的jar的名字
IMAGE_NAME="cimp" // 镜像名一般和项目名相同
IMAGE_ADDR="registry.cn-chengdu.aliyuncs.com/shentao123/${IMAGE_NAME}" // 镜像的位置
VERSION_ID="v${BUILD_ID}.0.0" //镜像的版本
}
stages {
stage('代码拉取'){
steps{
echo 'This is a pullCode step'
//git branch: "${BRANCH}", credentialsId: '1001', url: "${GIT_PROJECT_ADDR}"
// checkout $tag
// checkout scm
checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [],
userRemoteConfigs: [[url: 'https://gitee.com/shentaotest/cimp.git']]])
}
}
stage('构建操作') {
steps{
echo 'This is a Build step'
// 在有Jenkinsfile同一个目录下(项目的根目录下)
// sh 'cd spring-boot-backstage'
sh '''
mvn clean package
cd ./target/
mv redis-0.0.1-SNAPSHOT.jar ../
'''
}
}
// 创建目录(如果不存在),并把jar文件上传到该目录下
stage('构建镜像') {
steps{
echo 'push jar to target server'
sh '''
ole_image_id=`docker images|grep ${IMAGE_NAME}|grep ${VERSION_ID}|awk '{print $3}'`
if [[ -n "${ole_image_id}" ]]; then
docker rmi -f ${ole_image_id}
fi
docker build -f dockerfile --build-arg jar_name=${JAR_NAME} -t ${IMAGE_NAME}:${VERSION_ID} .
new_image_id=`docker images|grep ${IMAGE_NAME}|grep ${VERSION_ID}|awk '{print $3}'`
sudo docker login --username=沈涛mayday --password=990712st registry.cn-chengdu.aliyuncs.com
sudo docker tag ${new_image_id} ${IMAGE_ADDR}:${VERSION_ID}
sudo docker push ${IMAGE_ADDR}:${VERSION_ID}
'''
}
}
stage('发送到目标服务器并运行容器') {
steps {
echo 'pull image and docker run'
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.177.5', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $IMAGE_ADDR $VERSION_ID $PROJECT_NAME $host_port $JAR_NAME", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
jenkinsfile说明:
这一步在jenkins流水线语法中生成发送到目标服务器执行脚本需要向脚本传入4个参数
deploy脚本
最后将deploy.sh 脚本放在目标服务器的/usr/bin 下面。
jenkins配置参数化构建以及选择构建参数
构建成功!