四时宝库

程序员的知识宝库

傻瓜式DEVOPS实践手册——CI/CD实施

本手册面向零基础或初学者,通过极简步骤实现CI/CD(持续集成/持续交付)的快速落地。

主要步骤

    • 编写.gitlab-ci.yml
    • 编写dockerfile,如果不用docker部署,也可以不用写
    • 功能验证

gitlab-ci 编排文件

  • gitlab-ci文件主要控制流水线,主要定义阶段、任务、变量及制品库的缓存等等
  • 功能验证的.gitlab-ci.yml内容
before_script:

image:
  name: runner-maven-java:v1.0
  entrypoint: [""]

stages:
  - init
  - compile
  - build
  - deploy

variables:
  MAVEN_REPO: "-Dmaven.repo.local=/root/.m2/repository"
  PROJECT: project-nexus
  IMAGE_FULL_NAME: 192.168.56.10:8080/depository/project-nexus:v1.0
  docker_hub: http://192.168.56.10:8080
  docker_user: admin
  docker_pwd: Harbor

cache:
  key: gitlab-cache
  paths:
    - .m2/repository

init:
  stage: init
  tags:
    - nexus-runner
  script:
    - docker -v

env:
  stage: init
  tags:
    - nexus-runner
  script:
    - env

compile:
  stage: compile
  allow_failure: false
  only:
    - master
  tags:
    - nexus-runner
  script:
    - find / -name settings.xml
    - cat ./settings.xml > /usr/local/bin/apache-maven-3.3.9/conf/settings.xml
    - mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
  artifacts:
    name: $PROJECT
    expire_in: 1 days
    paths:
      - target/*.jar
build:
  stage: build
  script:
    - docker login --username=$docker_user --password=$docker_pwd $docker_hub
    - docker build -t $IMAGE_FULL_NAME .
    - docker push $IMAGE_FULL_NAME
    - rm -rf target
    - docker rmi $IMAGE_FULL_NAME
  when: manual
  tags:
    - nexus-runner

deploy:
  stage: deploy
  script:
    - docker-compose down
    - docker-compose pull project-nexus
    - docker-compose up -d
  when: manual
  tags:
    - nexus-runner
  • 关键配置项
    • image 执行器要使用的容器镜像
    • stages 定义流水线需要的任务阶段,我这里设置了init、compile、build、deploy
    • variablesd 设置全局变量,主要设置一些公共属性值
    • cache 缓存设置
  • docker-compose.yml文件内容
  • 主要是设置编排服务的容器化规则,包括镜像、暴露的端口号
services:
  project-nexus:
    image: 192.168.56.10:8080/depository/project-nexus:v1.0
    container_name: project-nexus
    restart: always
    privileged: true
    ports:
      - mode: ingress
        target: 8080
        published: "18080"
        protocol: tcp
  • image 从流程水推到镜像仓库中的镜像
  • ports 设置端口号,target 容器端口, published 映射到宿主机的端口号
  • dockerfile文件内容
  • 镜像生成文件,主要是把CI/CD生成的jar打成镜像
FROM openjdk:8-jdk
Maintainer allen <1441299@qq.com>
ADD ./target/project-nexus-0.0.1-SNAPSHOT.jar /app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
 
ENTRYPOINT ["java","-jar","/app.jar"]
 
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  • ADD 把项目打包后的jar,添加到镜像内
  • TZ 设置镜像时区
  • 项目整体结构
  • docker-compose.yml 也可以放到其他固定目录下,运行的时候用 -f 设置文件路径

功能验证

  • 功能验证
  • 代码提交
  • 流水线执行

镜像库

  • 登录Harbor,查看镜像是否推到仓库
  • 部署服务
  • 18080端口号就是docker-compose.yml映射的宿主机端口号
  • 整体pipeline效果图
  • 执行中


  • 执行完

整个流程环节有些多,涉及到的东西也比较多,如果想实践,要沉下心动起手来吧

整个DEVOPS实践手册我已经整理成PDF文档,想要的关注我留言即可

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接