Jenkins Jfrog Artifactory 以及docker下的pipeline 容器编排实践

1. 测试环境情况:

Docker主机 10.24.101.99
JFrog Artifactory 主机 10.24.101.99:8081 (admin password)
jenkinx 10.24.101.99:8080
github原始地址:https://github.com/jinriyang/swampup
github fock后地址:https://github.com/jinanxiaolaohu/swampup

2. 调试通了之后简单的groovy脚本

因为test脚本有异常 删除test stage 部分的脚本 

后面有一部分无意义的脚本 但是没来得及 仔细清理.

#!/usr/bin/env groovy

node ('master') {
    //Clone example project from GitHub repository
    git url: 'https://github.com/jinanxiaolaohu/swampup.git', branch: 'master'
    def rtServer = Artifactory.server SERVER_ID
    def buildInfo = Artifactory.newBuildInfo()
    def tagName
    buildInfo.env.capture = true
    //Fetch all depensencies from Artifactory
    stage('Dependencies') {
        dir('automation/docker-app') {
            try {
                println "Gather Java and Tomcat"

                def downloadSpec = """{
                         "files": [
                          {
                           "pattern": "zhaobsh_generic/jdk-8-linux-x64.tar.gz",
                           "target": "jdk/jdk-8-linux-x64.tar.gz",
                           "flat":"true"
                          },
                          {
                           "pattern": "zhaobsh_generic/apache-tomcat-8.tar.gz",
                           "target": "tomcat/apache-tomcat-8.tar.gz",
                           "flat":"true"
                          }
                          ]
                        }"""

                rtServer.download (downloadSpec, buildInfo)
                if (fileExists('jdk/jdk-8-linux-x64.tar.gz') && fileExists('tomcat/apache-tomcat-8.tar.gz')) {
                    println "Downloaded dependencies"
                } else {
                    println "Missing Dependencies either jdk or tomcat - see listing below:"
                    sh 'ls -d */*'
                    throw new FileNotFoundException("Missing Dependencies")
                }
            } catch (Exception e) {
                println "Caught exception during resolution.  Message ${e.message}"
                throw e
            }
        }
    }
    //Build docker image named "docker-framework" with Java 8 and Tomcat  
    stage('Build') {
        dir ('automation/docker-app') {
            withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: CREDENTIALS, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
                    def rtDocker = Artifactory.docker server: rtServer
                    tagName = "${ARTDOCKER_REGISTRY}/docker-app:${env.BUILD_NUMBER}"
                    def gradleLatestPath = getLatestGradleWar().trim()
                    def gradleWarDownload = """{
                       "files": [
                          {
                             "pattern": "zhaobsh_generic/*.war",
                              "target": "war/webservice.war",

                              "flat": "true"
                           }
                          ]
                    }"""
                  sh 'rm -f war/*'
                  rtServer.download(gradleWarDownload)
                    docker.build(tagName)
                    echo tagName
                    sleep 2
                    rtDocker.push(tagName,REPO, buildInfo)
                    sleep 2
                    rtServer.publishBuildInfo buildInfo
            }
        }
    }
    
    //Promote image from local staging repositoy to production repository 
    stage ('Promote') {
        dir ('automation/docker-app') {
            def promotionConfig = [
              'buildName'          : env.JOB_NAME,
              'buildNumber'        : env.BUILD_NUMBER,
              'targetRepo'         : PROMOTE_REPO,
              'comment'            : 'Framework test with latest version of application',
              'sourceRepo'         : SOURCE_REPO,
              'status'             : 'Released',
              'includeDependencies': false,
              'copy'               : true
            ]
            
            echo promotionConfig as String
            rtServer.promote promotionConfig
            reTagLatest (SOURCE_REPO)
            reTagLatest (PROMOTE_REPO)
         }
    }
}

def getLatestGradleWar () {
    def response = ''
    def gradleLatestWarSrc = """items.find(
    {
        "repo":{"\$eq":"zhaobsh_generic"}, "name":{"\$match":"webservice-*.war"}
    }
).sort({"\$desc" : ["created"]}).limit(1)"""
    withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: CREDENTIALS, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
        def curlString = "curl -s -u " + env.USERNAME + ":" + env.PASSWORD + " " + SERVER_URL
        def gradleLatestStr = curlString +  "/api/search/aql -X POST -H 'Content-Type: text/plain' -d '" + gradleLatestWarSrc + "' | python -c 'import sys, json; print json.load(sys.stdin)[\"results\"][0][\"path\"]'"
        println "Curl String is " + gradleLatestStr
        response = sh (script: gradleLatestStr, returnStdout: true)
    }
    println "Curl response: " + response
    return response
}

def updateDockerFile () {
    def BUILD_NUMBER = env.BUILD_NUMBER
    sh 'sed -i "s/docker-app:latest/docker-app:$BUILD_NUMBER/" Dockerfile'
}

def reTagLatest (targetRepo) {
     def BUILD_NUMBER = env.BUILD_NUMBER
     sh 'sed -E "s/@/$BUILD_NUMBER/" retag.json > retag_out.json'
     switch (targetRepo) {
          case PROMOTE_REPO :
              sh 'sed -E "s/TARGETREPO/${PROMOTE_REPO}/" retag_out.json > retaga_out.json'
              break
          case SOURCE_REPO :
               sh 'sed -E "s/TARGETREPO/${SOURCE_REPO}/" retag_out.json > retaga_out.json'
               break
      }
      sh 'cat retaga_out.json'
      withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: CREDENTIALS, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
          def curlString = "curl -u " + env.USERNAME + ":" + env.PASSWORD + " " + SERVER_URL
          def regTagStr = curlString +  "/api/docker/$targetRepo/v2/promote -X POST -H 'Content-Type: application/json' -T retaga_out.json"
          println "Curl String is " + regTagStr
          sh regTagStr
      }
}
//test docker image by runnning container
def testFramework (tag) {
    def result = true
    docker.image(tag).withRun('-p 8181:8181') {c ->
        sleep 10
        def stdout = sh(script: 'curl "http://localhost:8181/swampup/"', returnStdout: true)
        if (stdout.contains("Welcome Docker Lifecycle Training")) {
            println "*** Passed Test: " + stdout
        } else {
            println "*** Failed Test: " + stdout
            result = false
        }
    }
    sh "docker rmi ${tag}"
    return result
}

def updateProperty (property) {
    withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: CREDENTIALS, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
            def curlString = "curl -u " + env.USERNAME + ":" + env.PASSWORD + " " + "-X PUT " + SERVER_URL
            def updatePropStr = curlString +  "/api/storage/${SOURCE_REPO}/docker-framework/${env.BUILD_NUMBER}?properties=${property}"
            println "Curl String is " + updatePropStr
            sh updatePropStr
     }
}

3. pipeline的参数情况

4. linux主机的修改.

关闭防火墙 
关闭selinux
关闭swap
修改/etc/docker/daemon.json 增加jfrog仓库为insecure-registries
重启docker
下载jdk的tar包 解压缩并且 修改 /etc/profile 配置文件 增加JAVA_HOME 环境变量.
安装jenkins
安装jfrog artifactory
docker下安装sonar

5. jfrog artifactory的处理

   新增仓库 主要是第三步中的REPO的名字必须得有. 仓库类型 docker

   新增generic 仓库 上传文件, 与groovy脚本中的下载文件部分相匹配.

   主要需要的文件如图示

仓库名/文件名

 

继续一个仓库名 文件名

6. jenkins 需要进行的处理.

根据配置文件中的 server_id 增加 artifactory的 server_id 并且在步骤三中 定义上.

 

   在 系统管理-系统设置中 进行设置, 添加 serverid 如图示

下载部分可选插件

Artifactory部分的 增加相当的额内容. 

即可

7. build with parameters 即可.

转载于:https://www.cnblogs.com/jinanxiaolaohu/p/9209460.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JenkinsJFrog是两个常用的DevOps工具。Jenkins是一个开源的持续集成和交付工具,用于自动化构建、测试和部署软件。JFrog是一个用于软件包管理和制品库的工具,可以帮助开发团队管理和分发软件制品。 根据引用\[1\]中的内容,安装Jenkins的步骤如下: 1. 下载Jenkins的RPM包。 2. 安装Jenkins。 3. 修改Jenkins的启动脚本,添加Java路径。 4. 启动Jenkins。 5. 访问Jenkins的地址,并输入初始管理员密码。 6. 选择安装建议的插件。 7. 设置管理员用户。 而根据引用\[2\]中的内容,安装JFrog的步骤如下: 1. 创建JFrog的目录。 2. 进入JFrog的目录。 3. 创建system.yaml文件。 4. 修改目录的权限。 5. 运行JFrogDocker容器。 6. 访问JFrog的地址,并使用admin/123456作为用户名和密码登录。 至于引用\[3\]中提到的Linux主机的修改,包括关闭防火墙、关闭SELinux、关闭swap、修改Docker配置文件、重启Docker、下载JDK、设置环境变量等步骤,可能是为了在Linux主机上安装和配置JenkinsJFrog和Sonar等工具。 希望以上信息对您有所帮助。 #### 引用[.reference_title] - *1* *2* [Jfrog + jenkins的配置](https://blog.csdn.net/sserf/article/details/108143072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Jenkins Jfrog Artifactory 以及docker下的pipeline 容器编排实践](https://blog.csdn.net/weixin_30420305/article/details/95178063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值