当前位置:   article > 正文

jenkins pipeline harbor docker ansible部署maven项目_pipline语法如何实现跨主机拉取harbor上的镜像并部署

pipline语法如何实现跨主机拉取harbor上的镜像并部署

1 目标

通过jenkins pipeline部署maven项目,其中项目打包成docker镜像,镜像存储在harbor中。
[部署jenkins 参考](https://blog.csdn.net/lsnow8624/article/details/113740989)
[docker构建java项目参考](https://blog.csdn.net/lsnow8624/article/details/113341559)
[安装harbor参考](https://blog.csdn.net/lsnow8624/article/details/113248798)
  • 1
  • 2
  • 3
  • 4

2 详细步骤

2.1 创建pipeline任务

a、jenkins面板点“新建任务”
在这里插入图片描述
b、输入任务名称、选择流水线、再点“确定”即可创建pipeline任务
在这里插入图片描述
c、丢弃旧的构建,节约磁盘空间
在这里插入图片描述

2.2 pipeline脚本

此处在jenkins中直接写pipeline脚本,还可以将写pipeline文件放在git上。配置git拉取。
注:
a、没有jenkins slave执行节点。可以将jenkins和构建slave放在不同服务器,分担jenkins负载
b、maven项目和jenkins在同一台服务器,通过ansible在远程部署maven项目
在这里插入图片描述

2.3 环境变量
a、如上图,配置几个环境变量均和docker镜像或者harbor镜像库相关。构建镜像的时候需要带镜像地址和藏况名称才能push镜像到镜像仓库
b、jdk、maven、git在系统管理、全局配置工具中配置
  • 1
  • 2

在这里插入图片描述
c、jdk、maven如果要直接在pipeline中使用,需要用tools引用全局工具
也可以在pipeline文件中用printenv找到path路劲,将jdk和maven软连接至path
在这里插入图片描述
d、jenkins pipeline中使用docker可能会报权限相关错误。主要是因为jenkins是用jenkins用户执行,没有docker的执行权限。将jenkins用户增加到docker用户组中即可。

	usermod -G groupname username
	
	或者:gpasswd -a username groupname 
  • 1
  • 2
  • 3
e、从安全角度考虑将git和harbor的用户名和密码设置成jenkins 凭据
  • 1

在这里插入图片描述
f、pipeline脚本
该pipeline没有执行异常条件参数判断处理,也没有邮件通知

pipeline {
    agent {
        label "master"
    }

    environment {
        DOCKER_NAME='你的容器名'/*运行的docker容器名称*/
        DOCKER_TAG=createVersion()/*时间戳,作为版本*/
        HARBOR_URL='你的harbor地址'/*harbor地址*/
        HARBOR_REP='你的仓库名'/*镜像仓库名*/
        HARBOR_CRT='你的harbor凭证'/*jenkins上配置的harbor凭证*/
    }

    stages {
        stage('git pull'){
            steps {
                sh 'pwd'
                /*jenkins上配置的git凭证和地址*/
                git credentialsId: '你的git凭证', url: '你的git地址'
            }
        }
        stage('mvn install') {
            steps {
                script {
                    try {
                        sh 'pwd'
                            sh 'mvn --version'
                            /*用maven打包项目,此处掉过单元测试*/
                            sh 'mvn clean install -DskipTests'
                        
                        currentBuild.result="SUCCESS"
                    } catch (e) {
                        currentBuild.result="FAILURE"
                        throw e
                    } finally {
                    }
                }
            }
        }
        stage('image build') {
            steps {
                script {
                	/*在harbor上有更多镜像,构建主机只保留最后一次构建镜像。$是groovy的特殊字符,需要用\转义*/
                    sh """docker rmi \$(docker images | grep ${DOCKER_NAME} | sed -n  '1,\$p' | awk '{print \$3}') || true"""
                    def customImage=docker.build("${HARBOR_URL}/${HARBOR_REP}/${DOCKER_NAME}:${DOCKER_TAG}")
                    sh 'pwd'
                    withDockerRegistry(url: "http://${HARBOR_URL}", credentialsId: "${HARBOR_CRT}") {
                        /* Push the container to the custom Registry */
                        customImage.push()
                    }
                }
            }
        }
        
        stage('docker run') {
            steps {
                script {
                    sh 'pwd'

                    sh '''
                    /*web为在ansible的配置文件中配置的主机组,可以是多台主机*/
                    ansible web -a "docker rm -f ${DOCKER_NAME} " | true
                    ansible web -a "docker login -u 你的harbor用户名 -p 你的harbor密码 ${HARBOR_ULR}"
                    ansible web -a "docker pull ${HARBOR_URL}/${HARBOR_REP}/${DOCKER_NAME}:${DOCKER_TAG}"
                    ansible web -a "docker run -itd --name ${DOCKER_NAME} -p 8080:8080 ${HARBOR_URL}/${HARBOR_REP}/${DOCKER_NAME}:${DOCKER_TAG}"
					/*在运行主机上删除多余的镜像,只保留两个镜像。此处$转义需要用两个\\进行转义,单引号也需要进行转义。*/
                    ansible web -m shell -a "docker images | grep ${DOCKER_NAME} | sed -n \'3, \\$p\' | awk \'{print \\$3}\' | xargs docker rmi " || true
                    '''
                }
            }
        }
    }
}

def createVersion() {
    // 定义一个版本号作为当次构建的版本
    return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/582457
推荐阅读
相关标签
  

闽ICP备14008679号