gitlab CI/CD自动化部署


CI/CD 是一种持续开发软件的方法,可以不断的进行构建、测试和部署代码迭代更改。

一套完整的gitlab CI/CD配置包括:

  • gitlab Runner的安装及注册
  • 项目.gitlab-ci.yml的书写
  • 项目的部署

1. gitlab Runner

gitlab Runner 是一个开源项目,用于运行作业并将结果发送回gitLab.

前提:已部署gitlab

1.1 安装gitlab Runner

# 登录远程服务器,拉取gitlab-runner镜像
docker pull gitlab/gitlab-runner

# 启动容器
sudo 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

docker ps

1.2 注册runner

通过gitlab获取 注册令牌 去注册Runner,并返回了身份验证令牌,自动添加到runner的配置文件config.toml中。然后将 GitLab 和 Runner 连接起来。

  • 获取注册令牌
    根据需要注册全局或者针对某个项目的runner

    • 1)获取全局令牌
      登录管理员账号 => 管理员 => CI/CD->Runners->注册一个实例runner , 复制注册令牌(1iekpZaY9HxhHmaEDvLj)
      在这里插入图片描述
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/bb5489401
      在这里插入图片描述
    • 2)某一个项目的令牌
      在这里插入图片描述
  • 注册runner

# http://119.45.234.152:13800 gitlab的地址
# 1iekpZaY9HxhHmaEDvLj  注册令牌(全局或者针对某一个项目的令牌)
# 警告1,注意1
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "http://119.45.234.152:13800" \
  --registration-token "1iekpZaY9HxhHmaEDvLj" \
  --description "for-testproject" \
  --tag-list "vue" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

注册成功后,会在相关项目看到注册的runner
在这里插入图片描述

警告1WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
在这里插入图片描述
原因:runner 15.6版本后以后注册不支持带参
https://gitlab.com/gitlab-org/gitlab/-/issues/380872


注意1:如果注册成功后进入gitlab查看runner提示 Runner has never contacted this instance
注册文件有问题,删除后重新试

cd /srv/gitlab-runner/config/
ll
# 删除配置文件
rm -rf config.toml

2. .gitlab-ci.yml的书写

关键字详见官网: https://docs.gitlab.com/ee/ci/yaml/
在项目根目录新建.gitlab-ci.yml文件。每次提交都会触发该流水

# 指定使用node作为基础环境镜像
# 经常用到的镜像有node java python docker
image: node:alpine

# 全局关键词:定义阶段,任务根据这里的顺序执行
# 不指定的话默认是test
# 官方提供的stage有5个,阶段有执行顺序:.pre => build => test => deploy =>.post
# 这里我自己自定义 install build deploy
stages:
  - install 
  - build   
  - deploy   

# 配置缓存 
# 将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复
cache:
  key: testproject-cache
  paths:
    - node_modules

# 1.安装      
job_install:
  # 任务内的阶段,必须从全局阶段stages中选
  stage: install
  # 标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list
  tags:
    - vue
  # 定义该job执行的脚本
  script:
    - npm install

# 2.编译   
job_build:
  stage: build
  tags:
    - vue
  script:
    - npm run build
  # 失败后重试次数
  retry: 2
  # 只有指定的分支提交才会执行
  # only:
  #  - test

# 3.部署
job_deploy:
  stage: deploy
  tags:
    - vue
  script:
    - echo 'start deploy'
  # 这里目前用的是手动部署,自己去gitlab ci/co里面点击。打印的是字符串
  # 下面会针对部署完善
  when: manual  # manual 手动执行任务

在这里插入图片描述

3. 部署

3.1 docker方式部署

  • 修改.gitlab-ci.yml文件
# 3.docker方式部署
job_deploy:
  variables:
    imgname: "test-project" # 镜像名称。不能有大写字母
    containername: "h5-container" # 容器名称
  stage: deploy
  image: docker  # script中有用到docker镜像
  tags:
    - vue
  script:
    - docker build -t $imgname .
    # 使用docker命令去搜索docker容器里面是否有一个name 为 containername定义的变量名的容器,如果有,就删除这个容器
    - if [ $(docker ps -aq --filter name=$containername) ]; then docker rm -f $containername;fi
    - docker run -d -p 8082:80 --name $containername $imgname
    # 部署成功后访问http://119.45.234.152:8082
    - echo "deploy docker image success.visit http://119.45.234.152:8082"
  when: manual  # manual 手动执行任务
  • 编写Dockerfile
    项目根目录创建文件Dockerfile
FROM node:latest as builder
# 维护者信息
MAINTAINER susoft
# 指定工作文件路径
WORKDIR /app
# 把文件内容复制到docker容器里面
COPY package.json .
# RUN用于在镜像容器中执行命令
RUN npm install --registry=http://registry.npm.taobao.org
COPY . .
RUN npm run build

FROM nginx:latest
COPY --from=builder /app/dist /usr/share/nginx/html
  • 配置目录卷
    如果不配会报如下错:
    $ docker build -t $imgname .
    ERROR: error during connect: Get "http://docker:2375/_ping": dial tcp: lookup docker on 183.60.83.19:53: no such host
    ERROR: Job failed: exit code 1
    在这里插入图片描述
# 登录远程操作
docker ps
# 找到gitlab-runner的安装环境
cd /srv/gitlab-runner/config/
ll

# 编辑config.toml文件
vim config.toml
i # 进入编辑状态,找到对应的runner
    [[runners]]
      [runners.docker]
        volumes = ["/cache","/usr/bin/docker:/usr/bin/docker", "/var/run/docker.sock:/var/run/docker.sock"]
esc # 退出编辑状态
:wq # 保存

3.2 OSS部署

oss文档:https://help.aliyun.com/product/31815.html?spm=5176.7933691.J_7985555940.1.6c6f2c47M65ENt

  • 开通OSS: 可以去云平台申请免费试用对象存储OSS

  • 创建Bucket: 权限管理的读写权限要设置为 公共读写 才行
    在这里插入图片描述

  • 获取 endPoint, accessKeyID, accessKeySecret
    在这里插入图片描述

在这里插入图片描述

  • 将 endPoint, accessKeyID, accessKeySecret,作为变量绑定到gitlab上
    在这里插入图片描述
    在这里插入图片描述
  • 修改文件.gitlab-ci.yml
# 2.编译   
job_build:
  ...
  # 制品,此处dist是npm run build编译后生成的目录
  # 把这个dist目录存储起来做成一个制品,可以在后续每一个任务之间去相互传递
  artifacts:
    paths:
      - dist/
      
# 3.oss部署
job_deploy_oss:
  stage: deploy
  tags:
    - vue
  script:
    # 下载了一个oss的压缩包,下载到了项目根目录
    - wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64
    # 给ossutil64设置一个权限
    - chmod 755 ossutil64
    # 此处变量endPoint, accessKeyID, accessKeySecret可存于gitlab项目 => Settings => CI/CD => Variables处
    # endPoint是地域节点: oss-cn-beijing.aliyuncs.com
    # accessKeyID:key
    # accessKeySecret: 密钥
    - ./ossutil64 config -e ${endPoint} -i ${accessKeyID} -k ${accessKeySecret} -L CH --loglevel debug -c ~/.ossutilconfig
    # 使用cp命令把文件上传
    # testproject-bucket为bucket名
    # testProject 文件夹名称
    - ./ossutil64 -c ~/.ossutilconfig cp -r -f dist oss://testproject-bucket/testProject
  • 访问
    上传成功后可在对应的桶里看到上传的文件
    若需要浏览器直接访问,需使用自定义域名进行访问
    在这里插入图片描述
    在这里插入图片描述
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GitLab CI/CD 是一个强大的持续集成和持续交付工具,可以用于自动化 Android 应用程序的构建、测试和部署过程。以下是一些关于 GitLab CI/CD 和 Android 自动化的常见问题和解答: 1. 如何在 GitLab 中配置 Android 的 CI/CD? 在 GitLab 中配置 Android 的 CI/CD 可以通过编写一个名为 `.gitlab-ci.yml` 的配置文件来实现。该文件将定义构建、测试和部署的步骤。你可以使用 Android Gradle 插件执行构建和测试任务,然后使用 Gradle 插件将应用程序部署到设备或模拟器。 2. 如何执行 Android 构建和测试任务? 在 `.gitlab-ci.yml` 文件中,你可以使用 `before_script` 部分指定运行构建和测试任务所需的环境设置,例如安装 JDK、Android SDK 和 Gradle。然后,你可以使用 `script` 部分指定实际的构建和测试命令,例如运行 `gradlew assemble` 构建 APK 文件,或者运行 `gradlew test` 执行单元测试。 3. 如何在 GitLab CI/CD 中执行 Android 设备或模拟器上的 UI 测试? 如果你想在设备或模拟器上执行 UI 测试,你可以使用一些工具,例如 Espresso、UI Automator 或 Appium。你可以在 `script` 部分中运行适当的命令来启动设备或模拟器,并执行 UI 测试步骤。 4. 如何将 Android 应用程序部署到实际设备或应用商店? 在 GitLab CI/CD 中,你可以使用 Gradle 插件和适当的脚本命令将 Android 应用程序构建输出部署到实际设备或应用商店。你可以使用 `gradlew assembleRelease` 构建发布版本,并使用适当的脚本命令将 APK 文件上传到 Google Play Store 或其他应用商店。 这些是关于 GitLab CI/CD 和 Android 自动化的一些基本信息。当然,具体的配置和步骤可能因项目的需求和环境而有所不同。希望这些信息对你有所帮助!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值