Linux JFrog Artifactory 搭建

JFrog Artifactory

Artifactory是一款二进制存储管理工具,用来管理构建构建工具(如:gradle)等所依赖的二进制仓库,以方便管理第三方库和发布目标版本库,从而提高软件开发效率。它提供大量的插件以利于和不同工具之间的整合,内部使用权限管理更加安全,并支持高并发等等特性。另外我们搭建Artifactory私服的原因还有:

私有仓库的目的是作为团队内所使用的所有软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优势,这是因为:

·构件(jar)是二进制文件,不属于git版本控制系统,后者在处理文本文件方面比较好

·减少可能的版本冲突

·减少首次构建时需要的手动干涉

·中央仓库包含所有依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好

·使用内部仓库做clean构建时会快些,因为Maven构件是从内部服务器而不是从因特网上获取。

JFrog Artifactory开源版:

Ubuntu环境搭建

1.下载开源版.rpm

2.安装

用alien转换Redhat Linux包.rmp为Ubuntu包.deb

$sudo apt-get install alien ##alien默认没有安装,所以首先要安装它

$sudo alien xxxx.rpm ##将rpm转换为deb,完成后会生成一个xxxx.deb

$sudo dpkg -i xxxx.deb ##这样xxxx软件就可以安装完成了

安装.deb

Sudo dpkg –i xxx.deb

3.运行

默认安装路径为/opt/jfrog/,Artifactory自带了Tomcat服务器。

可以先启动Tomcat(/opt/jfrog/artifactory/tomcat/bin/startup.sh),再启动artifactory(/opt/jfrog/artifactory/bin/artifactoryctlstart)。

或直接一起启动(/opt/jfrog/artifactory/bin/artifactory.shstart)

启动服务:sudo /opt/jfrog/artifactory/bin/artifactory.sh

因为是新新装系统,系统里面没有 jdk,因此需要安装 java 环境,可以按照之前文档

How to Install OpenJDK JAVA 8 in Ubuntu

系统中原先有 1.8 的 openjdk,卸载 1.8 之后安装 1.9 需要强制安装

sudo apt-get -o Dpkg::Options::=”–force-overwrite” install openjdk-9-jdk

https://cloud.tencent.com/developer/news/44535

开放对应端口:https://www.cnblogs.com/zqunor/p/6417938.html

4.配置

默认在8081端口开启服务。初始用户为admin:password。第一次使用时会触发配置向导,要求修改密码创建仓库。Artifactory的仓库类型有:

·本地私有仓库:用于内部使用,上传的组件不会向外部进行同步。

·远程仓库:用于代理及缓存公共仓库,不能向此类型的仓库上传私有组件。

·虚拟仓库:不是真实在存储上的仓库,它用于组织本地仓库和远程仓库。

5.Gradle上传、引用文件

5.1 Gradle 上传


buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.9.0'
        classpath 'com.github.megatronking.stringfog:gradle-plugin:1.4.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url artifactory_url + 'libs-release-local'// The Artifactory (preferably virtual) repository to resolve from
            credentials {               // Optional resolver credentials (leave out to use anonymous resolution)
                username = artifactory_user // Artifactory user name
                password = artifactory_password // Password or API Key
            }
        }
    }
}

apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'

task androidJavadocs(type: Javadoc) {
    failOnError false
    source = android.sourceSets.main.java.sourceFiles
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    baseName = rootProject.ext.encryptId
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
    baseName = rootProject.ext.encryptId
}

publishing {
    publications {
        aar(MavenPublication) {
            groupId rootProject.ext.libGroupId
            version rootProject.ext.libVersion
            artifactId rootProject.ext.encryptId
            artifact("$buildDir/outputs/aar/${archivesBaseName}-v${versionName}.aar")
            artifact androidSourcesJar
            artifact androidJavadocsJar

            pom.withXml {
                List needAddDependencyNameList = ['lib']
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each {
                    for (String name : needAddDependencyNameList) {
                        if (name == it.name) {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                        }
                    }

                }
            }
        }
    }
}

artifactory {
    contextUrl = artifactory_url
    //The base Artifactory URL if not overridden by the publisher/resolver
    publish {
        //A closure defining publishing information
        repository {
            repoKey = 'libs-release'   //The Artifactory repository key to publish to
            username = artifactory_user          //The publisher user name
            password = artifactory_password      //The publisher password or API key
        }
        defaults {
            //List of Gradle Publications (names or objects) from which to collect the list of artifacts to be deployed to Artifactory.
            publications('aar')
            properties = ['qa.level': 'basic', 'q.os': 'android', 'dev.team': 'core']
            //Optional map of properties to attach to all published artifacts
            publishArtifacts = true   //Publish artifacts to Artifactory (true by default)
            publishPom = true   //Publish generated POM files to Artifactory (true by default).
//            publishIvy = true
            //Publish generated Ivy descriptor files to Artifactory (true by default).
        }

        artifactoryPublish.dependsOn  androidJavadocsJar
        artifactoryPublish.dependsOn  androidSourcesJar
    }
}

5.2 Gradle引用文件

与之前环境一样,不过少了上传的操作

https://cloud.tencent.com/developer/news/44535

[转载]Ubuntu环境变量——添加与删除

一、什么是环境变量?

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等[1]。因为一些参数可以被当做系统默认的设置,如此以来,在运行某个程序的时候就不需要再指定这些参数了。比如你总是使用某个程序,在命令行中使用时,每次运行这个程序你都要进入程序所在的目录启动程序。如果你将程序所在的目录加入环境变量后,运行程序时你只需要输入程序的名称,系统就会自动搜索到你程序的位置,而不会再出现command not found这样的问题了。

二、如何设置环境变量?

  • /etc/profile – 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录下的配置文件中搜集shell的设置
  • /etc/environment – 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量
  • /etc/bashrc – 为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取;
  • ~/.profile – 每个用户都可以使用该文件输入专用于自己使用的shell信息,当用户登陆时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的.bashrc文件;
  • ~/.bashrc – 该文件包含专用的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

认识了以上五个文件之后,我们设置环境变量的方法也就有了。

  • 方法一:直接修改/etc/environment文件,这样的方法是全局的,永久性的。
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
  • 方法二:修改/etc/profile文件,这种方法的作用域是全局的,永久性的。
    export PATH=$PATH:[your path0]:[your path1]:[...]

    这个文件不是保存环境变量信息的文件,在登陆时,系统只是根据它的内容对环境变量进行设置。

  • 方法三:修改/etc/bashrc或者~/.bashrc文件,这样的方法是非全局的,永久的
    这两个文件同样不是为了保存环境变量,只是在使用bash shell时进行设置而已,所以设置和方法二中一样:

    export PATH=$PATH:[your path0]:[your path1]:[...]

    对于/etc/bashrc文件,修改的作用于所有用户,但对于~/.bashrc文件,修改的仅仅作用于当前用户。

  • 方法四:修改~/.profile文件
    这种方法和修改/etc/profile本质上是一样的,这种只不过是仅仅修改了当前用户自己的配置文件。所以作用仅限于当前用户,但同样也是永久性的。
  • 方法五:在Terminal中使用export命令
    export PATH=$PATH:[your path0]:[your path1]:[...]

    这种方法是暂时性的,关闭终端这个设置也就失效了,而且作用仅仅限于当前终端,其他终端中这个设置不会起作用。

三、查看环境变量值

evn # 打印所以环境变量
echo $PATH # 打印$PATH环境变量

四、删除环境变量值

将上述方法中对配置文件的修改还原回去即可。另外,由于第五种方法由于是临时性且局部的,只要关闭这个Terminal就好了。

来源:http://beanocean.github.io/tool/2013/11/09/shell_environment_variable/