從零開始通過 Artifactory 搭建公網(wǎng)的 maven 倉庫

來自我的 Blog Danny's Dream

起因

最近在給公司的 SDK 蝶糯,做一個 maven 的倉庫琉雳,方便 CP 嵌入叮趴「铙希花了整兩天的時間,身為移動開發(fā)的我之前沒怎么接觸過服務器相關(guān)的內(nèi)容疫向,這里做一個記錄和分享咳蔚,** 并且網(wǎng)上大部分的教程都是如何搭建本地倉庫的 **。
用到了以下幾個內(nèi)容

  • Artifactory jfrog 家的用來做倉庫管理和持續(xù)集成【配合 Jenkins 】的工具 免費版就夠用了 【支持 maven gradle】
  • Maven Maven是Java開發(fā)者中流行的構(gòu)建工具搔驼,Maven的好處之一是可以幫助減少構(gòu)建應用程序時所依賴的軟件構(gòu)件的副本谈火,Maven建議的方法是將所有軟件構(gòu)件存儲于一個叫做repository的遠程倉庫中。
  • Gradle 是 Android Studio 中帶的自動化構(gòu)建工具 是 maven 的擴展
  • Nginx 是一個高性能的HTTP和反向代理服務器舌涨,也是一個IMAP/POP3/SMTP服務器糯耍,用來處理代理的。

之前沒有怎么操作過 Linux 的服務器囊嘉,這次經(jīng)歷還是很有趣的温技,把遇到的問題記錄一下。

連接主機

運維提供的服務器是 Linux 的扭粱,通過 ssh 方式來連接服務器舵鳞。

ssh xxx.xxx.xxx.xxx

這一步遇到的問題是 公司的 Linux 登錄驗證是提供了一個 私有的 ssh key,
我本地配置的是 GitHub 的 ssh key琢蛤,默認連接的時候用的是 GitHub 的 key蜓堕。
運維給出的方式是通過 -i 加上 key 的路徑來登陸。

ssh -i dan-key xxx.xxx.xxx.xxx

這樣的方式雖然可以博其,但是每次都這么輸入未免太麻煩了套才。
網(wǎng)上查了,提供了以下的方式解決的我的需求慕淡。
在 .ssh 文件下面建一個 config 文件如下配置

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa 

# maven
Host 192.168.111.11
User liudan 
PreferredAuthentications publickey
IdentityFile ~/.ssh/liudan-server 

這樣就能完美解決了多 ssh key 的登錄情況背伴。

安裝 Artifactory

Artifactory 的官網(wǎng) https://www.jfrog.com/open-source/
通過 java - version 檢查 java 環(huán)境
他需要的是 java8 的環(huán)境,如果沒有的話,要先給服務器搭建 jdk8 的環(huán)境傻寂。
但是里面的下載好像不能通過息尺,Linux 的 wget 指令直接在服務器內(nèi)部進行下載。
我是在本地下載完之后崎逃,通過 scp 指令再拷貝到服務器的【這里也需要 ssh key】
移動到服務器之后掷倔,通過 unzip 解壓眉孩。
得到下面的內(nèi)容


進入到 bin 文件夾中有


注意三個文件:

  • artifactory.sh 用來直接運行 artifactory 的進程个绍,運行之后就會打開 tomcat ,并且部署一個可視化的網(wǎng)頁
http://<你的ip>/artifactory/webapp/#/home
  • installService.sh 這個是用來安裝 artifactory 的服務浪汪,可以作為服務在后臺自動運行巴柿,并會隨服務器一起啟動【我猜的。死遭。我看他是移動到了init的目錄下面】
  • artifactoryManage.sh 是用來做服務管理的提供幾種方式
    {start|stop|restart|redebug|status|check} 這個就不翻譯了广恢,可以看到當前的狀態(tài)。
    使用方法這樣 ./artifactoryManage.sh check 加命令

注意的地方:
一般的教程都是讓你呀潭,直接執(zhí)行 artifactory.sh 就可以啟動了钉迷。其實服務端更多的時候希望他是作為后臺常駐的。
所以這里我們要執(zhí)行的 installService.sh 腳本
執(zhí)行完之后 會看到給我們的提示幫我們移動到了 /etc/init.d/artifactory 目錄中
通過這兩個指令可以檢查和啟動后臺的服務钠署。
/etc/init.d/artifactory check
/etc/init.d/artifactory start

** 這里要注意 artifactory.default 中的 user 的配置 糠聪!**
默認的是設置為 artifactory 的,但是 artifactory 用戶的權(quán)限不夠【可能是我們服務器配置的原因】谐鼎,
會導致 /etc/init.d/artifactory start 由于權(quán)限不夠而無法啟動 tomcat 的舰蟆。這是當時困擾了我很久問題。

按照上面的操作狸棍,你應該已經(jīng)能看到 Artifactory 的界面了
剛進去的時候會讓你設置 admin 密碼身害,同時設置倉庫類型。
都完成之后是這樣的界面:


這里學到了如下幾個 Linux 指令

ps -ef | grep artifactory

ps -ef 查看所有的進程草戈,通過 grep 進行過濾塌鸯,可以看到和 artifactory 相關(guān)的進程,拿到 pid 之后
通過

kill -9 目標id

就可以停止目標進程

Lib 的上傳

下面的內(nèi)容就相對簡單了唐片。
在你的 lib 的工程的 build.gradle 中增加如下插件的依賴

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:latest.release'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

接著在你需要上傳的 lib 的 module 的 build.gradle 的文件中增加如下配置:
這個是用來配置上傳的路徑和賬號信息的

artifactory {
    contextUrl = MAVEN_LOCAL_PATH
    publish {
        repository {
            // 需要構(gòu)建的路徑
            repoKey = 'gradle-release-local'

            username = 'admin'
            password = '這里是密碼'
        }
        defaults {
            // Tell the Artifactory Plugin which artifacts should be published to Artifactory.
            publications('aar')
            publishArtifacts = true

            // Properties to be attached to the published artifacts.
            properties = ['qa.level': 'basic', 'dev.team': 'core']
            // Publish generated POM files to Artifactory (true by default)
            // POM 文件
            publishPom = true
        }
    }
}

還有是配置上傳的版本信息

def MAVEN_LOCAL_PATH ='http://192.168.111.11:8081/artifactory'
def ARTIFACT_ID = 'testsdk'
def VERSION_NAME = '3.0.0'
def GROUP_ID = 'cn.test.test'

publishing {
    publications {
        aar(MavenPublication) {
            groupId GROUP_ID
            version = VERSION_NAME
            artifactId ARTIFACT_ID

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")

        }
    }
}

最主要的是配置這兩個 task丙猬。
然后開始執(zhí)行上傳!
步驟如下

  • clean 初始化
  • assembleRelease 構(gòu)建 aar
  • artifactoryPublish 發(fā)布到 Artifactory 中

問題
這里第一次 publish 的時候上傳失敗,遇到問題牵触,說找不到 POM 文件淮悼。
我去對應的路徑里面找,確實沒有生成揽思。
一開始我的操作是把上面的 artifactory 中的 defaults 的 publishPom 設置為 false 袜腥。這樣能順利 build 的,但是沒有上傳 POM 文件。

導致了后面在 demo 中通過 compile 'cn.test.test:testsdk:3.0.0' 這樣的形式找不到包羹令,必須通過明確的 aar 后綴的 complie 方式才能找到包鲤屡,估計 POM 文件是起到類型配置的作用的。

正確的操作應該執(zhí)行一下 artifactoryPublish 下面的 generatePomFileForAarPublication 就會生成了福侈。
?? 呵呵 沒想到吧
反正我是翻了大量的資料酒来,最后自己發(fā)現(xiàn)的。肪凛。堰汉。看的懂英文多重要伟墙!

上傳上去需要配置的三個參數(shù)

  • ARTIFACT_ID 你的庫名字
  • GROUP_ID 庫的包名【可以這么理解】
  • VERSION_NAME 庫的版本號

Lib 的集成

當上一步的包上傳完成之后翘鸭,在你的本地通過下面兩個配置就可以測試了。
首先在 Demo 的項目 gradle 增加 maven 庫的地址戳葵,記得和你上面的對應就乓。
大概是這樣

allprojects {
    repositories {
        jcenter()
        maven { url "http://192.168.111.11:8081/artifactory/gradle-release-local" }
    }
}

在 Demo 的 app 的 gradle dependencies 加上

compile 'cn.test.test:testsdk:3.0.0'

sync 一下你的 gradle 文件,需要的插件就下下來了~

注意這個 compile 的格式,是根據(jù)這個規(guī)則生成的拱烁。

GROUP_ID:ARTIFACT_ID:VERSION_NAME

公網(wǎng)映射

上面的流程夕玩,你已經(jīng)可以在你的本地厘惦,在連接上服務器之后,可以愉快的進行構(gòu)建的,可是目標是為了服務 CP萍程,CP 可不在內(nèi)網(wǎng)環(huán)境一姿。
我們希望的最終目標是他們能配置下面的 repo 地址厨喂,就能夠下載到需要的依賴包吴超。

 maven { url "http://repo.test.com/gradle/" }

這邊有兩部分操作

  • Nginx 做端口轉(zhuǎn)發(fā)80到8081
  • 聯(lián)系運維做外網(wǎng)的域名映射

之前一直對 Nginx 是個什么東西半知半解。
比如我們訪問了一個 ** tan 90 ** 的網(wǎng)址剂娄,看到這個界面

下面一行小字 nginx 蠢涝。我所理解的 Nginx 應該是客戶端和服務端中間的一層代理,他可以控制 a1 事件到 b 服務器處理阅懦,a2 事件到 c 服務器處理和二。請教了后臺的同事,nginx 還有很多作用耳胎,如負載均衡等等惯吕。

所以我們的流程如下

配置 Nginx

可以參考這篇文章相當?shù)脑敿?br> http://www.nginx.cn/install

需要以下環(huán)境

對應的最新包地址如下,都可以通過 wget 命令下載:

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz 
wget http://zlib.net/zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz

下完之后就是解壓怕午,tar废登,cd 進去,./config郁惜,make堡距,make install 的操作了。
把三個都執(zhí)行完之后,開始安裝 Nginx 羽戒。

最新地址

wget http://nginx.org/download/nginx-1.12.0.tar.gz

這里要設置一下 configure 的相關(guān)參數(shù)缤沦,設置為上面的幾個包。
默認都是下載到一個路徑下面易稠,解壓安裝

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid  --with-http_ssl_module --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=/usr/local/src/openssl-1.0.2l

啟動 Nginx

通過 /usr/local/nginx/sbin/nginx

發(fā)現(xiàn)報錯了:
error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
經(jīng)網(wǎng)上查詢缸废,這是linux的通病
下面這樣可以解決

[root@localhost nginx]# sbin/nginx 
sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@localhost nginx]# error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@localhost nginx]# whereis libpcre.so.1
libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1
[root@localhost nginx]# ln -s /usr/local/lib/libpcre.so.1 /lib64
[root@localhost nginx]# sbin/nginx   

先找到libpcre.so.1所在位置,然后做個軟鏈接就可以了驶社。

再次啟動企量!
直接訪問你的 ip 地址如果是這個界面就是成功了。

端口轉(zhuǎn)發(fā)

下面就可以衬吆,配置 nginx 進行端口的跳轉(zhuǎn) 80 交給 http://192.168.111.11:8081/artifactory/gradle-release-local梁钾。
修改 nginx 的 nginx.conf 文件绳泉。
配置如下

  server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        //通過這里加了代理的跳轉(zhuǎn)
        location /gradle/{
            proxy_pass  http://192.168.111.11:8081/artifactory/gradle-release-local/;
        }

    }

這里用到了重啟 nginx 的指令

./nginx -s reload

通過上面的配置就能實現(xiàn)跳轉(zhuǎn)功能逊抡。
測試的方式就是訪問
http://192.168.111.11/gradle/
看看是不是和之前是一樣的路徑,成功就是說明轉(zhuǎn)發(fā)成功了零酪。

映射

接下來就是聯(lián)系運維幫你做一下外網(wǎng)的映射冒嫡。就可以通過
http://repo.test.com/gradle/
來訪問你的 maven 庫了。

總結(jié)

通過這篇文章四苇,基本可以從零服務端基礎完整的搭建起一個 maven 倉庫了孝凌。如果只是內(nèi)網(wǎng)或者本地倉庫的話,就不用 nginx 這部分操作了月腋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟀架,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榆骚,更是在濱河造成了極大的恐慌片拍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓肢,死亡現(xiàn)場離奇詭異捌省,居然都是意外死亡,警方通過查閱死者的電腦和手機碉钠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門纲缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喊废,你說我怎么就攤上這事祝高。” “怎么了污筷?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵工闺,是天一觀的道長。 經(jīng)常有香客問我,道長斤寂,這世上最難降的妖魔是什么耿焊? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮遍搞,結(jié)果婚禮上罗侯,老公的妹妹穿的比我還像新娘。我一直安慰自己溪猿,他們只是感情好钩杰,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诊县,像睡著了一般讲弄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上依痊,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天避除,我揣著相機與錄音,去河邊找鬼胸嘁。 笑死瓶摆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的性宏。 我是一名探鬼主播群井,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毫胜!你這毒婦竟也來了书斜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酵使,失蹤者是張志新(化名)和其女友劉穎荐吉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凝化,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡稍坯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搓劫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞧哟。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枪向,靈堂內(nèi)的尸體忽然破棺而出勤揩,到底是詐尸還是另有隱情,我是刑警寧澤秘蛔,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布陨亡,位于F島的核電站傍衡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏负蠕。R本人自食惡果不足惜蛙埂,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遮糖。 院中可真熱鬧绣的,春花似錦、人聲如沸欲账。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赛不。三九已至惩嘉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踢故,已是汗流浹背文黎。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畴椰,地道東北人臊诊。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像斜脂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子触机,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容