引言
原來(lái)團(tuán)隊(duì)使用Jenkins進(jìn)行持續(xù)集成,工作的也不錯(cuò)。但是想要類似Github上使用TravisCI的效果,在內(nèi)部使用的GitLab上直觀的看到持續(xù)集成的過程。雖然已經(jīng)將Jenkins持續(xù)集成的結(jié)果和GitLab打通,但是效果不理想。最終還是考慮使用GitLab CI的功能進(jìn)行持續(xù)集成的方案。
實(shí)現(xiàn)目標(biāo)
- 可以直接使用Docker容器進(jìn)行編譯。
- 可以直接編譯安卓平臺(tái)的SDK和NDK。
- 能發(fā)布編譯后的結(jié)果到GitLab。
安裝 GitLab Runner
因?yàn)槲覀儸F(xiàn)有的服務(wù)器已經(jīng)有了Docker所以我選擇的方案是Install as a Docker service。關(guān)于Docker安裝的文章已經(jīng)很多了,可以搜索下或是按照官網(wǎng)的來(lái)操作也行。
執(zhí)行文檔里面提供的命令行:
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
運(yùn)行成功后執(zhí)行 docker ps
命令進(jìn)行查看,是否一個(gè)叫 gitlab-runner
的容器正在運(yùn)行,不出意外應(yīng)該是已經(jīng)有了。
在docker ps
命令的結(jié)果看到你的容器的CONTAINER ID
,類似這樣 3e8077e209f5
。有了ID我們進(jìn)入下一步注冊(cè)Runner。
注冊(cè)GitLabRunner
因?yàn)槲覀兡繕?biāo)是要使用Docker鏡像來(lái)跑CI所以我們使用gitlab-ci-multi-runner
進(jìn)行注冊(cè)。
這時(shí)候上一步的ID該啟作用了。我們需要進(jìn)入到已經(jīng)啟動(dòng)的容器內(nèi)部。
docker exec -it 3e8077e209f5 /bin/bash
這是id 3e8077e209f5是示例記得修改成自己的實(shí)際值。
執(zhí)行后我們就進(jìn)入到了容器的內(nèi)部。
執(zhí)行如下命令進(jìn)行注冊(cè)
gitlab-ci-multi-runner register \
--url "http://sample.gitlab.com/ci" \
--registration-token "3wvP7pfSWhqEgjzyHx2q" \
--description "docker for andorid" \
--executor "docker" \
--docker-image javan/android-docker:latest
這時(shí)候我們還缺少3個(gè)物料,url、registration-token、docker-image。
前面兩個(gè)簡(jiǎn)單,打開任意一個(gè)GitLab項(xiàng)目
在Specific Runners 可以看到。
剩下是鏡像的問題,如果自己沒有特殊需求可以直接使用網(wǎng)上其他人已經(jīng)編譯好的Docker鏡像,這里發(fā)現(xiàn)一個(gè)不錯(cuò)的現(xiàn)成安卓鏡像 gitlab-ci-android。
docker-image
配置的知識(shí)默認(rèn)鏡像實(shí)際中還可以通過 GitLab CI 的.gitlab-ci.yml
文件進(jìn)行修改。
注冊(cè)完成之后刷新項(xiàng)目的頁(yè)面:
出現(xiàn)一個(gè)處于工作狀態(tài)的Runner說(shuō)明你已經(jīng)配置好了。
剩下的工作就是給你的代碼倉(cāng)庫(kù)配置.gitlab-ci.yml
這個(gè)還是要具體學(xué)習(xí)。這個(gè)不是本文的重點(diǎn)就不在此擴(kuò)展。
定制Docker Image 支持 SDK和NDK
使用我定制好的DockerImage https://github.com/javanyou/gitlab-ci-android
發(fā)布編譯結(jié)果
job artifacts
artifacts 后面補(bǔ)上我自己的配置范例。