GitLab Continuous Integration (G

2019-06-14  本文已影响0人  仰望天空的小鸟

0. 前言

Gitlab从8.0开始,已经整合了一个CI工具( GitLab Continuous Integration)并且是默认enable的。也就是说只要你所使用的gitlab版本>=8.0,那么你里边的所以项目都可以使用GitLab CI。

引入了GitLab CI后的工作流程如下:


CI workflow

我们修改代码后提交到GitLab服务器,如果当前项目是已经配置了GitLab CI,GitLab就会根据你的配置(Part 1),把当前项目丢给GitLab CI(Part 1)处理,GitLab Ci根据设定好的任务(Part 3)一步步执行(CI PIPELINE)。

1. GitLab CI

1.1 GitLab CI包含两个模块:Gitlab-ci和GitLab-Runner

一个工程如果要使用GitLab CI, 那么它就要定义一个软件集成脚本(.gitlab-ci.yml, 后面会说到)用来自动化的执行一些集成工作,例如打包、运行测试单元等等。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到Runner本地并执行预定义好的执行脚本。如下图所示:


引入GitLab-ci和Gitlab-Runner的workflow

1.2 GitLab-ci的配置

展开项目的Setting项,会有个CI/CD子项:

gitlab-ci设置

选中这CI/CD项后,右边会有4个配置章节:

build.gradle中的maven-publish配置

我当然不希望我的maven用户信息暴露在gitlab项目代码里边,但提交maven又必须要这信息,那么可以通过环境变量的方式来获取这信息。那这MAVEN_USER和MAVEN_PASSWD就可以配置在Secret variable里边。

2. Runner的安装和配置

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
 Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 shell
aucean@debian:~$ wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
aucean@debian:~$ cd /opt
aucean@debian:/opt$ sudo mkdir android-sdk
aucean@debian:/opt$ sudo chown aucean android-sdk
aucean@debian:/opt$ cd android-sdk
aucean@debian:/opt/android-sdk$ unzip ~/sdk-tools-linux-4333796.zip
aucean@debian:/opt/android-sdk$ echo y | ./tools/bin/sdkmanager "platforms;android-27"
aucean@debian:/opt/android-sdk$ echo y | ./tools/bin/sdkmanager "platforms;android-28" 
aucean@debian:/opt/android-sdk$ echo y | ./tools/bin/sdkmanager "platform-tools"
aucean@debian:/opt/android-sdk$ echo y | ./tools/bin/sdkmanager "build-tools;29.0.0"
aucean@debian:/opt/android-sdk$ echo y | ./tools/bin/sdkmanager "build-tools;27.0.3"
aucean@debian:/opt/android-sdk$ yes | ./tools/bin/sdkmanager --licenses
aucean@debian:/opt/android-sdk$ sudo apt-get install openjdk-8-jdk

把下面两行添加到/etc/profile里边
export ANDROID_HOME=/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools/bin

3. 编写自动集成脚本

经过上面的配置,前期准备基本已经做好,现在可以开始配置自动集成脚本了。
在项目的跟目录下添加、编辑集成脚本文件(默认是.gitlab-ci.yml如果用其他文件名,则要在上面说到的General pipelines settings里边配置一下)。所有自动集成任务都是通过这脚本文件来设定

auceanliangs-iMac:TestActivity aucean.liang$ cat .gitlab-ci.yml 
before_script:
  - chmod +x ./gradlew
stages:
  - build

assembleDebug:
  stage: build
  tags:
    - component
  script:
    - ./gradlew :androidlib:assembleRelease
    - ./gradlew :androidlib:publishReleasePublicationToMavenRepository
auceanliangs-iMac:TestActivity aucean.liang$ 

关于这yml文件的详细写法可以参考:
https://about.gitlab.com/2018/10/24/setting-up-gitlab-ci-for-android-projects/
http://gitlab.futunn.com/help/ci/yaml/README.md

编辑完这yml文件后,commit & push到gitlab。然后回到Gitlab中的Projects面板,选中CI/CD项目的piplines

CI piplines

这时候应该就可以看到你的Runner当前执行任务的状态了,如下:

push后ci正在running

需要注意的是,如果.gitlab-ci.yml脚本没有指定tags(参考上面的.gitlab-ci.yml)或这指定tags不对的时候会出现如下情况:

image.png

当前任务被“stuck"(卡住)了
可能有人又会问:这tags是什么鬼?我去哪里找到它?
回想下上面运行gitlab-runner register时,是不是有要求你输入一个tags

Please enter the gitlab-ci tags for this runner (comma separated):
component

没错,就是这个tags。
你也可以回到你Gitlab项目的Runners Setting中展开查看

查看tags

那它为何一定要加这tags呢?
你可以点下你的Runner(Runners activated for this project下的那一串数字,我这里是e9b6d0d4)。点了后,进入它的详细配置,可以看到有一项“Can run untagged jobs”被设为了No (默认设置是No)
你可以点上图中的编辑按钮(黑色锁图标旁边那个)来修改它。

编辑yml添加了tags并重新提交后,应该可以看到当前当前任务为running状态了。点击这running,可以进入到当前pipeline的详情里,看到当前正执行哪个任务(我这里正在执行assembleDebug)、有哪些任务正在等待执行等等。

pipeline详情

点击这正在执行的任务,还能看到当前Runner console的输出:

Runner console 输出

参考资料

https://about.gitlab.com/2018/10/24/setting-up-gitlab-ci-for-android-projects/
http://gitlab.futunn.com/help/ci/README.md
http://gitlab.futunn.com/help/ci/quick_start/README.md#configuring-a-runner

上一篇 下一篇

猜你喜欢

热点阅读