jenkins流水线使用入门示例

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

构建Jenkins流水线任务

构建任务

 生成Groovy脚本

在配置中,选择hello world,然后进行应用,保存

构建后进行视图查看

 把之前使用自由风格做的流水线任务再来重新使用jenkins流水线进行一次操作,先编写一个简单脚本,模拟要进行的操作阶段:

pipeline {
    agent any

    stages {

        stage('从git上拉取代码') {
            steps {
                echo '从git上拉取代码 - success!'
            }
        }
        stage('maven构建代码') {
                    steps {
                        echo 'maven构建代码 - success!'
                    }
                }
        stage('使用sonarQube进行代码质量检测') {
                          steps {
                              echo 'sonarQube进行代码质量检测 - success!'
                          }
                      }
        stage('制作镜像并发布到Harbor上') {
                              steps {
                                  echo '制作镜像并发布到Harbor上 - success!'
                              }
                      }
           stage('通知部署镜像') {
                                      steps {
                                          echo '通知部署镜像 - success!'
                                      }
                              }

    }
}

把上面的脚本配置到流水线上,然后重新进行构建

扫描二维码关注公众号,回复: 15162648 查看本文章

 

 除了使用上面的方式外,我们可以通过使用Jenkinsfile的方式将脚本编写到项目中Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中的Jenkinsfile文件对项目进行构建

配置pipeline

再次进行构建,可以发现已经是通过 

 配置从gitlab上拉取代码

1、获取拉取代码的脚本

点击生成流水线脚本,然后将获取到的脚本发送填入到Jenkinsfile文件中

 checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'f8be2dcd-6d83-433a-8318-712382911b64', url: 'http://192.168.19.6:8929/gitlab-instance-de033185/cicd-demo.git']]])

配置Maven构建

生成的脚本如下:

sh '/var/jenkins_home/apache-maven/bin/mvn  clean package'

 使用SonarQube进行代码质量检测

sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=pipeline-demo -Dsonar.projectKey=pipeline-demo -Dsonar.java.binaries=/target -Dsonar.login=1324efeaad77d14977920c2bbc3e55ae0897fe38'

制作镜像发布到Harbor上

sh '''mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
docker tag mytest:${projectVersion} ${harborHost}/${harborRepo}/mytest:${projectVersion}
docker push ${harborHost}/${harborRepo}/mytest:${projectVersion}'''

通知目标服务器来对镜像进行部署

sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborHost $harborRepo mytest $projectVersion $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

 所有配置完成后,整个Jenkinsfile文件内容如下:

pipeline {
agent any
environment{
harborHost = '192.168.19.7:80'
harborRepo = 'repo'
harborUser = 'admin'
harborPasswd = 'Harbor12345'
}
stages {

stage('从git上拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'f8be2dcd-6d83-433a-8318-712382911b64', url: 'http://192.168.19.6:8929/gitlab-instance-de033185/cicd-demo.git']]])
echo '从git上拉取代码 - success!'
}
}
stage('maven构建代码') {
steps {
sh '/var/jenkins_home/apache-maven/bin/mvn clean package'
echo 'maven构建代码 - success!'
}
}
stage('使用sonarQube进行代码质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=pipeline-demo -Dsonar.projectKey=pipeline-demo -Dsonar.java.binaries=/target -Dsonar.login=1324efeaad77d14977920c2bbc3e55ae0897fe38'
echo 'sonarQube进行代码质量检测 - success!'
}
}
stage('制作镜像并发布到Harbor上') {
steps {
sh '''mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
docker tag mytest:${projectVersion} ${harborHost}/${harborRepo}/mytest:${projectVersion}
docker push ${harborHost}/${harborRepo}/mytest:${projectVersion}'''
echo '制作镜像并发布到Harbor上 - success!'
}
}
stage('通知部署镜像') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborHost $harborRepo mytest $projectVersion $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '通知部署镜像 - success!'
}
}

}
}

 进行最终的构建测试,发现所有流程均没有问题

猜你喜欢

转载自blog.csdn.net/zhangshenglu1/article/details/130747453