Skip to content

CI CD 集成和配置

Spring Boot 应用配置

jar包类型

配置.rancher-pipeline.yml

内容如下

yaml
stages:
    - name: complie
      steps:
          - runScriptConfig:
                image: nexus3.tineco.com/maven:3.6.0-jdk-8-alpine
                shellScript: mvn clean package -s /usr/share/maven/ref/settings.xml
    - name: push-image
      steps:
          - publishImageConfig:
                dockerfilePath: ./Dockerfile
                buildContext: .
                tag: xuanyuebo/webapp:${CICD_EXECUTION_SEQUENCE}
                pushRemote: true
                registry: nexus3.tineco.com
timeout: 60
notification: {}

配置Dockerfile

内容如下,可以自行条件启动参数,如jvm参数、端口等信息

FROM nexus3.tineco.com/openjdk:8-jdk-slim
WORKDIR /opt
ADD target/webapp.jar .
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS "-Xmx2048m -Xss512k -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/log/jvm/heap -XX:+PrintGCDetails -Xloggc:/log/jvm/gc.log"
EXPOSE 8080
ENTRYPOINT java $JAVA_OPTS -jar webapp.jar

war包类型

War包部署注意事项

  1. Application类需要继承SpringBootServletInitializer
  2. pom.xml里的packing设置为war
  3. 排除内置的tomcat依赖
xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <scope>provided</scope>
</dependency>

配置.rancher-pipeline.yml

内容如下

yaml
stages:
    - name: complie
      steps:
          - runScriptConfig:
                image: nexus3.tineco.com/maven:3.6.0-jdk-8-alpine
                shellScript: mvn clean package -s /usr/share/maven/ref/settings.xml -P prod
    - name: push-image
      steps:
          - publishImageConfig:
                dockerfilePath: ./Dockerfile
                buildContext: .
                tag: xuanyuebo/webapp:${CICD_EXECUTION_SEQUENCE}
                pushRemote: true
                registry: nexus3.tineco.com
timeout: 60
notification: {}

配置Dockerfile

内容如下,可以自行条件启动参数,如jvm参数、端口等信息

FROM nexus3.tineco.com/tomcat:9-openjdk8
COPY target/webapp.war /usr/local/tomcat/webapps/webapp.war
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS "-Xmx2048m -Xss512k -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/log/jvm/heap -XX:+PrintGCDetails -Xloggc:/log/jvm/gc.log"

前端项目配置

配置.rancher-pipeline.yml

内容如下

yaml
stages:
    - name: compile
      steps:
          - runScriptConfig:
                image: node:latest
                shellScript: |-
                    npm install --registry=https://nexus3.tineco.com/repository/npm-group/
                    npm run build
    - name: push-image
      steps:
          - publishImageConfig:
                dockerfilePath: ./Dockerfile
                buildContext: .
                tag: xuanyuebo/front-app:${CICD_GIT_BRANCH}
                pushRemote: true
                registry: nexus3.tineco.com
    - name: deploy
      steps:
          - applyYamlConfig:
                path: ./deployment.yaml
timeout: 60
branch:
    include:
        - release-*
notification: {}

配置Dockerfile

内容如下,可以自行条件启动参数,如jvm参数、端口等信息

FROM nexus3.tineco.com/nginx:latest
COPY ./dist /usr/share/nginx/html/front-app

手动编译镜像

配置成Dockerfile后,可以使用docker镜像镜像打包, 切换到Dockerfile所在目录,先运行maven或者npm的build命令,然后进行docker打包镜像。

# mvn package || npm run build
docker build . -t nexus3.tineco.com/tineco/user:release-20211130
# 推送镜像到镜像库
docker push nexus3.tineco.com/tineco/user:release-20211130

如果推送失败,请先用docker login nexus3.tineco.com登录nexus,具体账户参考nexus账号管理。

自动打包

通过气泡鱼平台可以进行自动打包。 首先先登录气泡鱼平台,通过仓库管理开启编译仓库,然后通过打tag进行镜像编译。

Sonarqube代码检查配置

项目可以选择静态代码检查

创建项目

通过Sonarqube管理控制台创建项目

后端集成

获取maven的编译命令如下,请修改对应的项目名称和token

mvn clean verify sonar:sonar -Dsonar.projectKey=rancher_balloonfish_AYkEmIF3Xv8rNWd4OSQZ -Dsonar.projectName='balloonfish' -Dsonar.host.url=https://sonar.tineco.com -Dsonar.token=xxx -Dsonar.projectVersion=${CICD_GIT_BRANCH} -s /usr/share/maven/ref/settings.xml -P prod

修改.rancher-pipeline.yml

由于sonar maven plugin的版本问题,修改maven的image为nexus3.tineco.com/maven:3.8-openjdk-17-slim

修改本地的lombok和maven-compiler插件版本

Spring Boot项目可以通过以下配置修改pom.xml里的属性配置

    <properties>
        <lombok.version>1.18.24</lombok.version>
        <spring-boot-maven-plugin.version>2.7.4</spring-boot-maven-plugin.version>
    </properties>

修改完成后在气泡鱼触发编译,编译完成后可以看到代码检查结果

前端项目集成

获取项目基本信息

参考后端

修改.rancher-pipeline.yml

增加check节点,信息如下,需要根据上面获得的信息修改对应部分

yaml
stages:
    - name: compile
      steps:
          - runScriptConfig:
                image: node:16.13.0-slim
                shellScript: |-
                    yarn config set registry https://nexus3.tineco.com/repository/npm-group/
                    yarn install
                    yarn build
    - name: check
      steps:
          - runScriptConfig:
                image: nexus3.tineco.com/sonar-scanner-cli:4.6.2
                shellScript: |-
                    export SONAR_HOST_URL=https://sonar.tineco.com
                    export SONAR_TOKEN=xxx
                    export SONAR_SCANNER_OPTS="-Dsonar.projectVersion=${CICD_GIT_BRANCH} -Dsonar.projectKey=rancher_balloonfish-web_AYkF8wYrXv8rNWd4OSlh"
                    sonar-scanner
    - name: push-image
      steps:
          - publishImageConfig:
                dockerfilePath: ./Dockerfile
                buildContext: .
                tag: tineco/balloonfish:${CICD_GIT_BRANCH}
                pushRemote: true
                registry: nexus3.tineco.com
timeout: 60
branch:
    include:
        - release-*
notification: {}

配置好后重新发布编译即可