來自個人 Blog Danny's Dreamhtml
最近在給公司的 SDK ,作一個 maven 的倉庫,方便 CP 嵌入。花了整兩天的時間,身爲移動開發的我以前沒怎麼接觸過服務器相關的內容,這裏作一個記錄和分享, 而且網上大部分的教程都是如何搭建本地倉庫的 。
用到了如下幾個內容java
以前沒有怎麼操做過 Linux 的服務器,此次經歷仍是頗有趣的,把遇到的問題記錄一下。linux
運維提供的服務器是 Linux 的,經過 ssh 方式來鏈接服務器。android
ssh xxx.xxx.xxx.xxx複製代碼
這一步遇到的問題是 公司的 Linux 登陸驗證是提供了一個 私有的 ssh key,
我本地配置的是 GitHub 的 ssh key,默認鏈接的時候用的是 GitHub 的 key。
運維給出的方式是經過 -i 加上 key 的路徑來登錄。nginx
ssh -i dan-key xxx.xxx.xxx.xxx複製代碼
這樣的方式雖然能夠,可是每次都這麼輸入未免太麻煩了。
網上查了,提供瞭如下的方式解決的個人需求。
在 .ssh 文件下面建一個 config 文件以下配置git
# 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 的登陸狀況。github
Artifactory 的官網 www.jfrog.com/open-source…
經過 java - version 檢查 java 環境
他須要的是 java8 的環境,若是沒有的話,要先給服務器搭建 jdk8 的環境。
可是裏面的下載好像不能經過,Linux 的 wget 指令直接在服務器內部進行下載。
我是在本地下載完以後,經過 scp 指令再拷貝到服務器的【這裏也須要 ssh key】
移動到服務器以後,經過 unzip 解壓。
獲得下面的內容web
注意三個文件:tomcat
http://
<你的ip>
/artifactory/webapp/#/home
複製代碼
{start|stop|restart|redebug|status|check} 這個就不翻譯了,能夠看到當前的狀態。
使用方法這樣 ./artifactoryManage.sh check 加命令複製代碼
注意的地方:
通常的教程都是讓你,直接執行 artifactory.sh 就能夠啓動了。其實服務端更多的時候但願他是做爲後臺常駐的。
因此這裏咱們要執行的 installService.sh 腳本
執行完以後 會看到給咱們的提示幫咱們移動到了 /etc/init.d/artifactory 目錄中
經過這兩個指令能夠檢查和啓動後臺的服務。
/etc/init.d/artifactory check
/etc/init.d/artifactory start服務器
這裏要注意 artifactory.default 中的 user 的配置 !
默認的是設置爲 artifactory 的,可是 artifactory 用戶的權限不夠【多是咱們服務器配置的緣由】,
會致使 /etc/init.d/artifactory start 因爲權限不夠而沒法啓動 tomcat 的。這是當時困擾了我好久問題。
按照上面的操做,你應該已經能看到 Artifactory 的界面了
剛進去的時候會讓你設置 admin 密碼,同時設置倉庫類型。
都完成以後是這樣的界面:
這裏學到了以下幾個 Linux 指令
ps -ef | grep artifactory複製代碼
ps -ef 查看全部的進程,經過 grep 進行過濾,能夠看到和 artifactory 相關的進程,拿到 pid 以後
經過
kill -9 目標id複製代碼
就能夠中止目標進程
下面的內容就相對簡單了。
在你的 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 {
// 須要構建的路徑
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。
而後開始執行上傳!
步驟以下
問題
這裏第一次 publish 的時候上傳失敗,遇到問題,說找不到 POM 文件。
我去對應的路徑裏面找,確實沒有生成。
一開始個人操做是把上面的 artifactory 中的 defaults 的 publishPom 設置爲 false 。這樣能順利 build 的,可是沒有上傳 POM 文件。
致使了後面在 demo 中經過 compile 'cn.test.test:testsdk:3.0.0' 這樣的形式找不到包,必須經過明確的 aar 後綴的 complie 方式才能找到包,估計 POM 文件是起到類型配置的做用的。
正確的操做應該執行一下 artifactoryPublish 下面的 generatePomFileForAarPublication 就會生成了。
🙂 呵呵 沒想到吧
反正我是翻了大量的資料,最後本身發現的。。。看的懂英文多重要!
上傳上去須要配置的三個參數
當上一步的包上傳完成以後,在你的本地經過下面兩個配置就能夠測試了。
首先在 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 的格式,是根據這個規則生成的。
GROUP_ID:ARTIFACT_ID:VERSION_NAME複製代碼
上面的流程,你已經能夠在你的本地,在鏈接上服務器以後,能夠愉快的進行構建的,但是目標是爲了服務 CP,CP 可不在內網環境。
咱們但願的最終目標是他們能配置下面的 repo 地址,就可以下載到須要的依賴包。
maven { url "http://repo.test.com/gradle/" }複製代碼
這邊有兩部分操做
以前一直對 Nginx 是個什麼東西半知半解。
好比咱們訪問了一個 tan 90 的網址,看到這個界面
下面一行小字 nginx 。我所理解的 Nginx 應該是客戶端和服務端中間的一層代理,他能夠控制 a1 事件到 b 服務器處理,a2 事件到 c 服務器處理。請教了後臺的同事,nginx 還有不少做用,如負載均衡等等。
因此咱們的流程以下
2 映射到咱們的目標服務器
3 nginx 進行端口的跳轉 80 交給 http://192.168.111.11:8081/artifactory/gradle-release-local
能夠參考這篇文章至關的詳細
www.nginx.cn/install
須要如下環境
對應的最新包地址以下,均可以經過 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 的操做了。
把三個都執行完以後,開始安裝 Nginx 。
最新地址
wget http://nginx.org/download/nginx-1.12.0.tar.gz複製代碼
這裏要設置一下 configure 的相關參數,設置爲上面的幾個包。
默認都是下載到一個路徑下面,解壓安裝
./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複製代碼
經過 /usr/local/nginx/sbin/nginx
發現報錯了:
error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
經網上查詢,這是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 地址若是是這個界面就是成功了。
下面就能夠,配置 nginx 進行端口的跳轉 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;
}
//經過這裏加了代理的跳轉
location /gradle/{
proxy_pass http://192.168.111.11:8081/artifactory/gradle-release-local/;
}
}複製代碼
這裏用到了重啓 nginx 的指令
./nginx -s reload複製代碼
經過上面的配置就能實現跳轉功能。
測試的方式就是訪問
http://192.168.111.11/gradle/
看看是否是和以前是同樣的路徑,成功就是說明轉發成功了。
接下來就是聯繫運維幫你作一下外網的映射。就能夠經過
repo.test.com/gradle/
來訪問你的 maven 庫了。
經過這篇文章,基本能夠從零服務端基礎完整的搭建起一個 maven 倉庫了。若是隻是內網或者本地倉庫的話,就不用 nginx 這部分操做了。