全新框架开发应用gitlab

使用Gitlab Runner进行CICD实例

2022-09-20  本文已影响0人  文景大大

上一篇文章只是介绍了Gitlab Runner的入门案例,并没有涉及到真正的CICD流程,本文主要通过如下案例来举例说明CICD的一个简单过程:

建议阅读完上一篇文章后,再进行本文的实验,如果已经完全掌握Gitlab Runner,可以继续。

案例一:Nginx部署前端单页应用

1.1 案例目标

我们有一个cicd-test项目,里面只有一个html页面,我们使用windows gitlab runner将该页面部署到本地windows的nginx上,实现通过浏览器能访问到该页面的目标。

1.2 准备工作

1.3 项目内容

1.4 结果验证

此时可以查看流水线的运行情况,我这里显示运行成功:

Running with gitlab-runner 15.3.0 (bbcb5aba)
  on win-runner-01 -9aDynfb
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:01
Running on IT-ZX02...
Getting source from Git repository
00:15
Fetching changes with git depth set to 20...
Initialized empty Git repository in D:/gitlab-runner/builds/-9aDynfb/0/gitlab-instance-9a531526/cicd-test/.git/
Created fresh repository.
Checking out 337f4901 as main...
git-lfs/2.13.3 (GitHub; windows amd64; go 1.16.2; git a5e65851)
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:01
$ cp .\hello.html D:\nginx-1.20.2\html\
Job succeeded

然后检查下nginx的目录下D:\nginx-1.20.2\html\确实多了hello.html,此时访问localhost:80/hello.html,就能访问到新的页面了。

至此,案例一CICD流程成功。

案例二:Nginx部署前端Vue应用

2.1 案例目标

我们按照Vue官方指引新建一个初始化应用,然后使用windows gitlab runner将该项目打包后部署到本地windows的nginx上,实现通过浏览器能访问到该页面的目标。

2.2 准备工作

需要安装最新版本的Node.js运行环境,这个可以参考Vue官方指引

然后其它步骤,比如gitlab runner的注册,nginx的安装同1.2中的内容。

2.3 项目内容

按照Vue的官方指引,在本地某个目录下生成一个初始化应用,确保如下命令成功后再往下继续。

npm install
npm run dev

访问改项目主页能成功后再往下继续。

然后,我们再定义我们的CICD流程,.gitlab-ci.yml内容如下:

stages:
  - install
  - build
  - deploy

# 定义需要缓存的目录
cache:
  paths:
    - node_modules
    - dist

install-job:
  stage: install
  script:
    - npm install

build-job:
  stage: build
  script:
    - npm run build
  # 可在流水线上下载本阶段作业的制品
  artifacts:
    name: "dist"
    paths:
      - dist 

deploy-job:
  stage: deploy
  script:
    - cp -r .\dist\* D:\nginx-1.20.2\html\

其中需要注意的是,我们使用了cache关键字,然后指定了需要缓存的路径,这是为什么呢?

因为gitlab每个作业在进行的时候,都会删除上一个作业新增的内容,比如install阶段,会新增node_modules目录资源,那么在接下来的build阶段,会删除该目录再执行作业,同理,在deploy阶段会删除build阶段新增的dist目录资源。因此,如果不配置缓存,那么build和deploy肯定就不能成功了,所以我们才需要将这两个目录缓存下来。

在执行build和deploy作业的时候,虽说还会删除上一个作业的新增目录资源,但是声明需要被缓存的目录会在下一个作业开始的时候被恢复的。如下是deploy阶段作业的执行记录:

Running with gitlab-runner 15.3.0 (bbcb5aba)
  on win-runner-01 imSTjF34
*******
# 删除上一步作业新增的目录
Removing dist/
Removing node_modules/
git-lfs/2.13.3 (GitHub; windows amd64; go 1.16.2; git a5e65851)
Skipping Git submodules setup
# 开始恢复缓存内容
Restoring cache
00:03
Version:      15.3.0
Git revision: bbcb5aba
Git branch:   15-3-stable
GO version:   go1.17.9
Built:        2022-08-19T22:41:07+0000
OS/Arch:      windows/amd64
Checking cache for default-protected...
Runtime platform                                    arch=amd64 os=windows pid=19504 revision=bbcb5aba version=15.3.0
No URL provided, cache will not be downloaded from shared cache server. Instead a local version of cache will be extracted. 
# 恢复缓存成功
Successfully extracted cache
# 执行脚本
Executing "step_script" stage of the job script
00:01
$ cp -r .\dist\* D:\nginx-1.20.2\html\
Saving cache for successful job
00:01
Version:      15.3.0
Git revision: bbcb5aba
Git branch:   15-3-stable
GO version:   go1.17.9
Built:        2022-08-19T22:41:07+0000
OS/Arch:      windows/amd64
Creating cache default-protected...
Runtime platform                                    arch=amd64 os=windows pid=19240 revision=bbcb5aba version=15.3.0
node_modules: found 673 matching files and directories 
dist: found 7 matching files and directories       
Archive is up to date!                             
Created cache

2.4 结果验证

推送如上项目内容到git仓库后,就会自动触发流水线执行上述CICD流程,可以看到本地nginx的目录下多了项目内容,并且启动nginx后可以访问到项目了。

案例三:Tomcat部署后端Java应用

3.1 案例目标

我们使用start.spring.io创建一个入门Spring Boot应用,然后使用windows gitlab runner将该项目打包后部署到本地windows的tomcat上,实现通过浏览器能访问到该应用接口的目标。

3.2 准备工作

需要下载并安装jdk运行环境环境,需要下载并安装maven工具,这两个的教程比较多,此处不再赘述。

然后其它步骤,比如gitlab runner的注册同1.2中的内容。

3.3 项目内容

start.spring.io创建一个SpringBoot应用如下:

java-cicd项目创建

然后用idea打开项目后,随意编写一个测试接口:

@Slf4j
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String getHello(){
        return "hello!";
    }
}

本地启动项目,确保项目和如上接口能正常运行。

然后新增.gitlab-ci.yml文件内容如下:

stages:
  - build
  - deploy

# 定义需要缓存的目录
cache:
  paths:
    - target

build-job:
  stage: build
  script:
    - mvn -DskipTests=true clean package
  # 可在流水线上下载本阶段作业的制品
  artifacts:
    name: "jar"
    paths:
      - target\java-cicd-test-0.0.1-SNAPSHOT.jar

deploy-job:
  stage: deploy
  script:
    - cp target\java-cicd-test-0.0.1-SNAPSHOT.jar D:\java\
    - cd D:\java\
    - java -jar java-cicd-test-0.0.1-SNAPSHOT.jar

然后提交代码到gitlab仓库,就触发流水线运行。

3.4 结果验证

浏览器访问http://localhost:8080/hello,能够正常访问该应用的接口。

上一篇 下一篇

猜你喜欢

热点阅读