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 构建发布任务
选择项目和分支即可

构建成功如下所示:


浙公网安备 33010602011771号