在Gitlab上使用Shell和Docker Executor进行Java应用的CI和CD
通过GitLab Runner ,你可以使用各种执行器来实现持续集成(CI)/持续交付(CD)。另一方面,Shell和Docker的应用更为广泛,我们可以更容易地用这些运行器配置仓库。这些运行器可以根据你的要求和可用资源来选择。
简介
本文的代码是用bash编写的,重点是Java Linux应用程序、Shell和Docker执行器。可以用bash脚本来构建和测试该应用程序。
理解shell和Docker执行器
Shell执行器是一个基本的执行器,可以帮助你在安装了GitLab Runner的电脑上本地构建解决方案。因为GitLab Runner是安装在Linux机器上的,所以还必须安装基本的软件。
Docker执行器是一个强大的工具,自带很多软件,可以通过镜像访问。使用这种执行器的好处是,我们将不必手动安装任何软件,因为一切都将由Docker处理。Docker通过从Docker Hub获取所需的镜像来完成这一工作。这样做的消极一面是,出于安全原因,这种通信在一些组织中可能会受到限制。如果是这样,Shell Executor是最理想的选择。
在Shell Executor上的Java实现
要求
这些是必须安装在 Linux 计算机上的一些基本程序。然而,它可以根据编译脚本进行调整,必要时你可能需要获得额外的软件。
以下是软件要求。
-
Git- 第一个标准是将修改的内容提交给GitLab。这是一个版本管理系统,可以跟踪文件随时间变化的情况。
-
Apache Ant- 这是一个协助创建进程以及生成项目的jar文件的工具。它提供了额外的项目信息,这些信息应该包含在jar中。
-
JDK- 你需要在你选择的机器上安装一定版本的JDK,以便创建jar文件。例如,OpenJDK-8是一个合适的Java开发工具包。
路径配置
如果安装成功后没有配置所安装软件的路径。
可以通过运行下面的命令来完成。
Variable / path
File
- Git。如果Linux机器中的Git路径还没有设置,请设置它。你可以通过检查你所使用的git类型。
export Git = /usr/bin/git - java。
export JAVA=/usr/bin/java可以检查你所使用的java的类型。 - apache Ant。
export ANT=/usr/bin/ant可以检查用哪种Ant。 - permission。在运行
build.xml,允许它:chmod -R 777*。 - Build.xml。它将根据其包含的数据创建项目和jar。
- .GitLab-ci.yml。这个文件包含了所有的CI/CD设置,包括软件和脚本路径,应该位于项目的根目录中。你可以在本节中描述这个仓库应该如何工作。在把这个文件放进根目录之前,请检查这个文件是否是一个有效的yml文件。
设置GitLab Runner
按照下面的说明,下载并配置GitLab Runner。
- 用下面的命令在Linux电脑上安装GitLab Runner。
sudo chmod +x /usr/local/bin/gitlab-runner
- 使用下面的命令允许它执行。
sudo chmod +x /usr/local/bin/gitlab-runner
- 使用下面的命令建立一个GitLab CI。
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
- 使用下面的命令将其安装并作为服务运行。
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
- 使用下面的命令来启动GitLab Runner。
sudo GitLab-runner start
- 在注册存储库之前,使用下面的命令停止GitLab Runner。
sudo gitlab-runner stop
- 要注册一个仓库,在GitLab Runner被正确停止后,在终端运行以下命令。
sudo gitlab-runner register
- 当使用GitLab Runner注册一个仓库时,你必须回答以下问题。
- 为你的GitLab实例输入以下URL。每个组织的格式都会不同,但都是类似于
http://gitlab.example.com。 - 路径。进入你的GitLab账户并登录。展开运行器,选择你想用运行器设置CI/CD注册的存储库。
- 对于这个运行器,输入
gitlab-ci token:这将是每个项目的唯一令牌,注册时需要,可以在这里找到。 - 输入这个运行器的GitLab-ci描述。把运行者的名字(任何名字)。这将有助于你回忆起谁在跑步。
- 对于这个运行者,填写以下gitlab-ci标签。这是可选的,当yml文件中的某个标签可用时,启动GitLab runner。
- 执行者来了。你会得到一个执行器的列表供你挑选,然后是shell类型(因为GitLab runner会运行我们的系统)。
- 成功注册后,使用以下命令运行GitLab Runner。
sudo GitLab-runner start
为了确保GitLab Runner已经注册了仓库,并确保运行器正在运行,请进入GitLab账户→选择你想用runner注册的仓库→设置→CI/CD→展开runner。
一个绿色的圆圈将出现,这个项目的活跃运行者会显示一个信息。
如果这个圆圈是灰色的,说明运行器还没有启动,必须重新启动。
Linux版GitLab运行器命令
- Sudo GitLab-runner register- 必须使用 GitLab Runner 来注册项目。
- Sudo GitLab-runner register- 开始运行器。
- Sudo GitLab-runner stop- 必须停止运行器。
- Sudo GitLab-runner status- 了解 GitLab-runner 的运行状况。
- Sudo GitLab-runner unregister -name test-runner- 取消项目的运行器注册,用你的运行器名称替换test-runner,你可以在
config.toml文件(你的GitLab-runner所在的位置)中找到。 - Sudo GitLab-runner unregister -Urlgitlab.example.com/-token t0k3n- 可以用一个URL和一个token来删除运行器。
- Sudo GitLab-runner unregister -all-runners所有的运行器都应该被取消注册
- Sudo GitLab-runner restart- GitLab Runner服务被停止,然后用此命令重新启动。
- Sudo GitLab-runner uninstall- 该命令将GitLab Runner作为一项服务停用并卸载它。
- sudo GitLab-runner exec- 运行此命令以获得可用的执行器列表。
- sudo GitLab-runner -help- 通过运行该命令,你可以看到最近的命令列表。
- sudo GitLab-runner run -help- 可以看到环境变量的名称。
- sudo GitLab-runner -debug- 以调试模式运行一个命令。
- Sudo GitLab-runner exec shell- 查看shell选项的完整列表。
gitlab-ci.yml_shell执行器。
在shell执行器模式下,.gitlab-ci.yml 的内容如下所示。
改变它以适应要求。
stages:
- build
- execute
build:
stage: build
script:
- ant -f build.xml
artifacts:
paths:
- abc.jar
execute:
stage: execute
script:
- pwd
- cd scripts
- chmod -R 777 *
- pwd
- ./run.sh
Docker执行器上的Java实现
不需要手动安装任何软件,因为所有东西都会从Docker容器中提取。不过,你可以通过在yml文件中输入名称并导出路径来安装基本软件。
要在Docker执行器模式下启动GitLab运行器,请进入GitLab运行器设置(上文),选择Docker而不是shell。
.gitlab-ci.yml_ Docker executor
在Docker执行器模式下,.gitlab-ci.yml 的内容列在下面。
如果有必要,请修改它。
image: ubuntu:latest
stages:
- build
- execute
before_script:
- echo "Before script section"
- apt-get update && apt-get -y install openjdk-8-jdk && apt-get -y install ant
build:
stage: build
script:
- ant -f build.xml
artifacts:
paths:
- abc.jar
execute:
stage: execute
script:
- pwd
- cd scripts
- chmod -R 777 *
- pwd
- ./runtest.sh
总结
在本教程中,我们已经了解了路径配置、GitLab运行程序以及所使用的命令。有了这些知识,我们就可以使用Docker和shell执行器在Java应用程序中自由实现持续集成/持续交付。