在k8s里使用pipeline调用jenkins-slave

在k8s里使用pipeline调用jenkins-slave

1. pipeline调用jenkins-slave

2. pipeline使用官方一个实例测试

image

2.1 在jenkins里配置以上红色标记示例

  • 编写jenkins项目
    image

  • 配置pipeline文件
    image

    podTemplate(label:'jenkins-slave', cloud:'kubernetes', containers: [
        containerTemplate(
            name: 'jnlp',     
            image: 'harbor.scajy.org/library/jenkins-slave:1.8',
        ), 
      ]) {
    
    node ("jenkins-slave") {
        stage('拉取代码') {
            echo '拉取代码'
            git credentialsId: 'f9d39981-7fdc-40ba-9a7a-e44022549503', url: 'git@10.100.24.87:k8s/tomcat_java_demo.git'
        }
        stage('编译打包') {
            echo '编译打包'
        }
        stage('部署发布') {
            echo '部署发布'
        }
      }
    }
    
  • 保存重新部署测试
    image

3. 正式部署CI编译代码

3.1 编写代码示例

// 公共
def registry = "harbor.scajy.org"           // harbor的连接地址
// 项目
def project = "k8s"                      // harbor的项目目录
def app_name = "java-demo"                       // 项目名称
def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"      // 推送harbor的全路径,BUILD_NUMBER是取得当前jenkins构建的号,为版本号
def git_address = "git@10.100.24.87:k8s/tomcat_java_demo.git"             // 根据项目要更换git地址
def base_image = "${registry}/library/tomcat:latest"                      // 构建项目需要的基础镜像
// 认证
def secret_name = "registry-pull-secret"
def docker_registry_auth = "22473425-d3fc-419b-8c08-04dea86c3e3d"       // harbor仓库key,这个key要去jenkins查找
def git_auth = "f9d39981-7fdc-40ba-9a7a-e44022549503"                   // git代码仓库的key,这个key要去jenkins查找
def k8s_auth = "80e66a86-d189-4555-b1ef-054285031b7a"

podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
    containerTemplate(
        name: 'jnlp',          // 模板
        image: "${registry}/library/jenkins-slave:1.8"       // jenkins-slave从服务器镜像
    ),
  ],
  volumes: [
    hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker')
  ],
) 
{
  node("jenkins-slave"){
      // 第一步
      stage('拉取代码'){
         checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
      }
      // 第二步
      stage('代码编译'){
          sh "mvn clean package -Dmaven.test.skip=true"
      }
      // 第三步
      stage('构建镜像'){
          withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
            sh """
              echo '
                FROM  ${base_image}
                RUN rm -rf /usr/local/tomcat/webapps/*
                ADD target/*.war /usr/local/tomcat/webapps/ROOT.war 
              ' > Dockerfile
              ls 
              ls target
              docker build -t ${image_name} .
              docker login -u ${username} -p '${password}' ${registry}
              docker push ${image_name}
            """
            }
      }

  }
}

3.2 在jenkins开始实行案例

3.2.1 登陆jenkins

image

3.2.2 在jenkins配置项目使用的key
  • 点击系统管理
    image

  • 点击配置manage credentials
    image

  • 添加凭据
    image

  • 添加连接密钥
    image

  • 添加harbor密钥
    image

  • 保存后,我们可以看到ID
    image

  • 使用pipeline流水线语法,保存账号和密码
    image
    image

3.2.3 案例部署
  • 点击配置
    image

  • 参数化构建过程
    image

  • 配置pipeline
    image
    下面是配置代码详细

    // 公共
    def registry = "harbor.scajy.org"           // harbor的连接地址
    // 项目
    def project = "k8s"                      // harbor的项目目录
    def app_name = "java-demo"                       // 项目名称
    def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"      // 推送harbor的全路径,BUILD_NUMBER是取得当前jenkins构建的号,为版本号
    def git_address = "git@10.100.24.87:k8s/tomcat_java_demo.git"             // 根据项目要更换git地址
    def base_image = "${registry}/library/tomcat:latest"                      // 构建项目需要的基础镜像
    // 认证
    def secret_name = "registry-pull-secret"
    def docker_registry_auth = "22473425-d3fc-419b-8c08-04dea86c3e3d"       // harbor仓库key,这个key要去jenkins查找
    def git_auth = "f9d39981-7fdc-40ba-9a7a-e44022549503"                   // git代码仓库的key,这个key要去jenkins查找
    def k8s_auth = "80e66a86-d189-4555-b1ef-054285031b7a"
    
    podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
        containerTemplate(
            name: 'jnlp',          // 模板
            image: "${registry}/library/jenkins-slave:1.8"       // jenkins-slave从服务器镜像
        ),
      ],
      volumes: [
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
        hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker')
      ],
    ) 
    {
      node("jenkins-slave"){
          // 第一步
          stage('拉取代码'){
             checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
          }
          // 第二步
          stage('代码编译'){
              sh "mvn clean package -Dmaven.test.skip=true"
          }
          // 第三步
          stage('构建镜像'){
              withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                sh """
                  echo '
                    FROM  ${base_image}
                    RUN rm -rf /usr/local/tomcat/webapps/*
                    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war 
                  ' > Dockerfile
                  ls 
                  ls target
                  docker build -t ${image_name} .
                  docker login -u ${username} -p '${password}' ${registry}
                  docker push ${image_name}
                """
                }
          }
    
      }
    }
    
    
  • 点击构建,
    image

  • 验证是否构建成功
    image

  • 登陆harbor验证镜像是否上传了
    image
    image
    image
    image

posted @ 2022-05-20 14:09  七月流星雨  阅读(904)  评论(0编辑  收藏  举报