Fork me on GitHub

Jenkins Pipeline项目实战

一、项目流程

  •  Jenkins从git拉取指定tag代码
  • Jenkins构建代码、镜像以及推送镜像到镜像库
  • Jenkins通过Publish Over SSH通知远程服务器拉取镜像、远程服务器通过镜像启动容器

二、实现流程

1、从代码仓中拉取Jenkinsfile文件

 2、从git拉取指定tag代码

配置Git参数:

 

剩下的部分需要在Jenkinsfile中完成 。

3、构建代码、镜像以及推送镜像到镜像库

构建代码镜像中需要引入容器端口以及宿主机端口变量,这是在参数构建中进行设置:

 

 剩下的部分则在Jenkinsfile文件中完成。

三、Jenkinsfile文件

pipeline {
    // jenkins集群中的任一节点
    agent any

    // 存放所有任务集合
    stages {
        stage("拉取Git代码") {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '6600bebe-4eec-4529-ac44-ef8', url: 'http://172.16.52.8/shenjianping/web_test.git']]])
            }
        }

        stage("制作自定义镜像并且发布到Harbor") {
            steps {
                sh '''docker build -t 172.16.52.10:80/repo/${JOB_NAME}:$tag .
          docker login -u shenjianping -p ****** 172.16.52.10:80
            docker push 172.16.52.10:80/repo/${JOB_NAME}:$tag'''
            }
        }

        stage("通知远程服务器拉取镜像,进行部署") {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'server02', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /usr/local/test
          chmod a+x deploy.sh
          ./deploy.sh 172.16.52.10:80 repo ${JOB_NAME} $tag $host_port $container_port''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'deploy.sh')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }

    }
}

 在Jenkinsfile文件中有的固定值,如 172.16.52.10:80 镜像仓库等可以使用environment声明成全局变量然后通过${variableName}方式进行引用。

posted @ 2022-09-19 20:35  iveBoy  阅读(469)  评论(0编辑  收藏  举报
TOP