最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端自动化部署-.gitlab-ci.yml配置

    正文概述 掘金(前端中后台)   2021-05-29   775

    一、前言

    该过程中用到的技术栈git gitlab shell

    需要提前准备的内容

    • 一个项目myweb
    • 本机安装Git
    • 一个Gitlab仓库
    • docker私有仓库
    • gitlab runner(Gitlab-runner)

    公司的代码一般都保存在私有化部署的Gitlab,要使用Gitlab的CI/CD,需要Gitlab版本>8.0.0

    CI/CD虽然不难,但配置过程中有很多坑,而且有些要了解的概念也比较多,可以分成多个步骤,逐一攻破。

    二、入门CI实战

    1、安装、注册Gitlab-runner

    gitlab-runner需要提前进行安装和注册,详情

    进入Gitlab->CICD->Runner 当前可用的runner有

    前端自动化部署-.gitlab-ci.yml配置

    如图所示,该项目可用的runner

    • 左边runner仅可以为当前项目使用,但需要激活一下。
    • 右边为共享的runner, 可以直接使用
    • .gitlab-ci.yml中以tags和runner的tags关联

    2、先把CI跑起来

    首先在项目的根目录下新建.gitlab-ci.yml,然后在该文件中配置pipeline的任务,这些任务将会跑在gitlab-runner中。

    一个最简单的.gitlab-ci.yml文件,其中CI_COMMIT_BRANCH、GITLAB_USER_LOGIN是一些gitlab定义好的变量,可以直接使用,你也可以定义自己的变量

    image: "node"
    
    stages:
      - BuildImage
    
    before_script:
      - echo "before_script"
      - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
      - echo "Hello, $GITLAB_USER_LOGIN!"
    
    build:
      tags:
        - test
      stage: BuildImage
      image: "node"
      script:
        - node -v
    

    推送Git仓库

    git add .gitlab-ci.yml
    git commit -m "commit ci"
    git push
    

    进入gitlab-> CI/CD页面,可以看到一个pipeline状态是stuck,这是因为没有Gitlab-runner。

    前端自动化部署-.gitlab-ci.yml配置

    3、使用Gitlab-runner执行pipeline

    修改.gitlab-ci.yml,仅展示部分

    build:
      # tags,代表要使用的runner,这里改成uaek-c1 
      tags:
        - uaek-c1
      stage: BuildImage
      image: "node"
      script:
        - node -v
    

    提交代码,进入CI/CD页面看到新增了一条pipeline执行完成

    前端自动化部署-.gitlab-ci.yml配置

    点击新的记录,可以看到对应的Stage,点击当前任务

    前端自动化部署-.gitlab-ci.yml配置

    可以看到Gitlab-runner执行.gitlab-ci.yml的具体信息。

    前端自动化部署-.gitlab-ci.yml配置

    到目前为止,已经看到了.gitlab-ci.yml触发到执行的过程,接下来,看看针对这个项目怎样去具体跑CI

    三、项目实战配置

    1、在项目添加Dockerfile文件和Nginx配置文件

    (1)、根目录中添加配置文件Dockerfile

    FROM node:10-alpine as builder
    WORKDIR /data/myweb
    COPY . .
    RUN npm install --registry=https://registry.npm.taobao.org --no-package-lock --no-save
    RUN yarn publish:prod
    
    FROM nginx:alpine as myweb
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo "Asia/Shanghai" > /etc/timezone 
    WORKDIR /data/production
    COPY ./nginx /etc/nginx/conf.d
    COPY  --from=builder /data/myweb/build /data/production
    EXPOSE 80, 443
    

    (2)、在项目根目录中新建nginx/default.conf,我们用外挂的nginx配置文件覆盖原来Nginx镜像中的配置文件

    server {
        listen 80;
        listen [::]:80;
        server_name localhost;
    
        location / {
            root /data/production;
            index index.html;
            try_files $uri /index.html;
        }
    
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        	root /usr/share/nginx/html;
        }
    }
    

    2、配置文件

    # 定义全局变量,镜像名称,命名空间,镜像拉取的密码的变量名
    variables:
      IMAGE_HUB: "lvpf/myweb" 
      DOCKER_HUB_URL: "hub.docker.com/r/lvpf/myweb"
    
    # 这里打印一些变量,仅仅为了展示,看下这些gitlab预设的变量值,可以去掉
    before_script:
      - echo "VARIABLE CI_COMMIT_SHA IS $CI_COMMIT_SHA!"
      - echo "VARIABLE CI_COMMIT_TAG IS $CI_COMMIT_TAG!"
      - echo "VARIABLE CI_PROJECT_DIR IS $CI_PROJECT_DIR!"
    
    # stages顺序运行, 同一个stage的所有job并行
    stages:
      - BuildImage
    
    # 任务1,构建docker镜像
    docker-image-master:
      # 使用的Gitlab Runner标签
      tags:
        - uaek-c1
      # 任务名称
      stage: BuildImage
      # 由于当前runner为k8s构建的,所以这里执行docker构建和上传需要通过kaniko镜像,具体可以看下面参考文档()
      image: gcr.io/kaniko-project/executor
      script:
        # 首先我们需要为我们的镜像生成一个tag,规则是:如果有 git tag,就使用 git tag,如果没有的话,就使用 git commit sha
        - IMAGE_TAG=$CI_COMMIT_SHA && if [[ -n "$CI_COMMIT_TAG" ]]; then IMAGE_TAG=$CI_COMMIT_TAG; fi
        - echo $IMAGE_HUB:$IMAGE_TAG
        - mkdir -p /kaniko/.docker
        - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
        - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $DOCKER_HUB_URL:$IMAGE_TAG
      # 使用 only 来限制这个 job 什么情况下会运行,下面的设置标识只有新的 tag 被创建时才触发CI,如果去掉,每次推送分支都会触发CI
      only:
        - tags
    

    3、注意事项

    • 一般公司安全性考虑,不会将镜像推送到hub,公司内网一般也不通,要考虑自建私有镜像仓库
    • gitlab-runner可以使用的宿主机类型很多,包括云主机、docker、k8s等,构建镜像的解决方式略有不同,可以参考文档
    • 其中一些涉及密码的变量,可以通过Gitlab->Setting->CI/CD->Variables来设置,直接在.gitlab-ci.yml中使用

    四、参考文档

    • Gitlab CI快速开始
    • 在k8s构建的gitlab-runner中构建镜像-docs
    • 在k8s构建的gitlab-runner中构建镜像-中文

    起源地下载网 » 前端自动化部署-.gitlab-ci.yml配置

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元