jenkins+docker+pipeline发布java项目

一 环境说明

1 jenkins我是用war方式启动的,版本为2.243
2 docker这里是跑java项目的
3 代码仓库用的是gitee
4 docker镜像仓库用的是阿里云的

二 发布

1 发布大致流程

1 推送代码到gitlab
2 编译 mvn clean install
3 编写dockerfile ,build构建镜像 docker build -t demo . -f 
4 更改镜像标签     docker tag 472b59d796c7 registry.cn-beijing.aliyuncs.com/ganen/test:v1   
5 登录dockerhub   docker login -uusername -ppasswodrd registry.cn-beijing.aliyuncs.com
6 推送到镜像仓库
7 在指定服务器拉取镜像,启动镜像,启动之前需要先停止原来的docker

2 指定项目和分支

3 pipeline脚本设置

这个脚本里面需要用的gitlab和docker仓库,需要在jenkins里面设置好凭据
如图:

脚本具体内容如下:

//认证
def docker_registry_auth ="b57a8637-5dc2-4e96-93eb-1e17561ff5fb"

node() {
stage(' Git clone ') {
git branch: '${branch}', credentialsId: '20eeae73-d4ab-4b45-97dc-0c1351d5f86b', url: 'https://gitee.com/huningfei/${service_name}.git'
}

stage('maven buid'){

sh "mvn clean package -Dmaven.test.skip=true"
}
stage("Create Dockerfile"){
sh '''cat << EOF > Dockerfile
  FROM java:8
  WORKDIR /root/.jenkins/jobs/docker-pipline
  COPY target/demo-0.0.1-SNAPSHOT.jar  /demo-0.0.1-SNAPSHOT.jar
  CMD java -jar /demo-0.0.1-SNAPSHOT.jar
'''
sh 'cat Dockerfile'
}
stage("build images and push to harbor"){
     withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
sh '''
containerPool=registry.cn-beijing.aliyuncs.com/ganen
docker build -t ${service_name}:${BUILD_NUMBER} .
docker tag ${service_name}:${BUILD_NUMBER} ${containerPool}/${service_name}:${BUILD_NUMBER}
docker login -u ${username} -p ${password} registry.cn-beijing.aliyuncs.com
docker push ${containerPool}/${service_name}:${BUILD_NUMBER}
'''
     }
}
stage("pull images and deploy"){
    withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
sh '''
containerPool=registry.cn-beijing.aliyuncs.com/ganen
ssh root@101.200.209.128 "docker rm -f ${service_name}"
ssh root@101.200.209.128 "docker login -u ${username} -p ${password} registry.cn-beijing.aliyuncs.com"
ssh root@101.200.209.128 "docker pull ${containerPool}/${service_name}:${BUILD_NUMBER}"
ssh root@101.200.209.128 "docker run -d -p 8080:8081 --name ${service_name} -v /home/ops/${service_name}/:/data/  ${containerPool}/${service_name}:${BUILD_NUMBER}"
ssh root@101.200.209.128 "docker ps |grep ${service_name}"
bash /home/ops/shell/docker_version.sh
sleep 5
ssh root@101.200.209.128 "curl http://172.17.195.94:8080/getAppName"
curl http://101.200.209.128:8080/getAppName
'''
    }
} 
}

在 stage("pull images and deploy)"
这个步骤里,除了正常的下载镜像和运行容器,我还运行了一个docker_version.sh脚本,去获取远程主机上面镜像的TAG,后期会根据tag去进行回滚
脚本内容如下:

ssh root@101.200.209.128 'docker images'|awk '{print $2}'|grep -v TAG > /tmp/docker.version

3 构建发布任务

选择项目和分支即可

构建成功如下所示:

posted @ 2020-07-07 17:00  huningfei  阅读(572)  评论(0)    收藏  举报
levels of contents