Jenkins 是什么

Jenkins®是一个开源的,用 Java 编写的开源持续集成(CI)服务器,可以自托管以自动执行任何项目的构建周期。Jenkins 为软件项目提供 CI 服务,可以通过命令行或 Web 应用程序服务器启动它。
项目打包发布Jenkins - 图3

Jenkins 的作用

可以设置 Jenkins 来监视 GitHub,Bitbucket 或 GitLab 等地方的任何代码更改,使用 Maven 和 Gradle 等工具自动进行构建;可以利用 Docker 和 Kubernetes 等容器技术,启动测试,然后在生产中执行回滚或前滚之类的操作。
项目打包发布Jenkins - 图4

Jenkins 的优点

  • Jenkins 是开源的(免费),并且拥有庞大的社区
  • 有许多可用的插件使 Jenkins 易于使用
  • Jenkins 用 Java 编写,这意味着它是可移植的
  • 开发人员可以在其他地方花费更多的时间:大多数集成和测试由自动化的构建和测试系统进行管理。
  • 加快开发速度:大多数集成工作是自动完成的,从长远来看,这可以在项目的整个生命周期中节省时间和金钱。
  • 更高质量的软件:可及早发现问题并立即解决。这样可以使软件保持可以随时安全发布的状态。

    Jenkins 的缺点

  • 成本和时间: Jenkins 必须在服务器上运行(成本),并且经常需要系统管理员的关注(时间)。你不能指望建立了詹金斯,然后让它自己运行。该系统将需要经常更新和维护。

  • 需要投入一些资金才能开始使用: 大多数团队遇到的一些主要障碍是初始设置,拖延或先前尝试建立 Jenkins的尝试失败。许多团队都知道这是最佳做法,但是在进行更紧急的编码工作时会忽略它。
  • 测试可能会中断: 需要实时更新,如果未更新它们,则这些测试将停止提供价值。

    Jenkins 的安装

    0.检查宿主机Java与Maven环境

    ```json

    验证JAVA环境获取安装路径

    [root@lrdong jenkins]# java -version java version “1.8.0_221” Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

    获取JDK安装路径

    [root@lrdong jenkins]# which java /usr/java/jdk1.8.0_221-amd64/bin/java

验证MAVEN环境获取安装路径

[root@lrdong jenkins]# mvn -v Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d) Maven home: /usr/local/apache-maven-3.8.1 Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_221-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: “linux”, version: “3.10.0-1127.el7.x86_64”, arch: “amd64”, family: “unix”

获取MAVEN安装路径

[root@lrdong jenkins]# which mvn /usr/local/apache-maven-3.8.1/bin/mvn

  1. <a name="HSD09"></a>
  2. ### 1.准备Compose文件
  3. 链接:[https://pan.baidu.com/s/1OhIFSfLEChz0ryJChL1O1A](https://pan.baidu.com/s/1OhIFSfLEChz0ryJChL1O1A) 提取码:dong
  4. ```yaml
  5. version: '3'
  6. services:
  7. jenkins:
  8. image: jenkins/jenkins:lts # 镜像`jenkins/jenkins:lts`
  9. container_name: jenkins # 容器名为'jenkins'
  10. restart: always # 指定容器退出后的重启策略为始终重启
  11. volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
  12. - "/usr/bin/docker:/usr/bin/docker"
  13. - "/var/run/docker.sock:/var/run/docker.sock"
  14. - "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
  15. - "./jenkins_home:/var/jenkins_home"
  16. - "/usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64" # JDK安装路径
  17. - "/usr/local/apache-maven-3.8.1:/usr/local/apache-maven-3.8.1" # MAVEN安装路径
  18. environment: # 设置环境变量
  19. TZ: Asia/Shanghai
  20. LANG: en_US.UTF-8
  21. user: root # 使用root权限运行容器
  22. ports: # 映射端口
  23. - "8080:8080"

2.启动项目在portainer查看默认密码

若启动时出现镜像拉取慢或拉取不到,可以参考Docker基本使用配置源

docker-compose -f docker-compose-jenkins.yml -p jenkins up -d

image.png

踩坑记录

安装报WARNING hudson.model.UpdateCenter#updateDefaultSite: Upgrading Jenkins. Failed 是因为容器连不上网,可以将网络模式调整为host模式——>network_mode: “host”

3.访问8080端口复制默认密码

image.png

4.安装基础插件

image.png
image.png

5.创建账户开始使用

image.png

Jenkins的使用

0.配置JDK与Maven环境

image.png
image.png

1.创建任务

image.png

2.配置Gitlab地址与账号

image.png
3.构建springboot项目

3.1配置Maven打包与Docker打镜像Shell命令

image.png
Maven与Shell构建命令

MAVEN
clean package -DskipTests

#!/bin/bash -l
PN=wx-smalltine-api;                        
docker rm -f $PN;     #首次构建注释                          
docker rmi -f $PN;       #首次构建注释                  
docker build -t $PN .;                 
docker run -d -e PROFILE=prod -p 9600:9600 -v /home/$PN/log:/tmp --restart=always --name $PN $PN;

3.2.查看构建日志

image.png
image.png

3.3.查看项目运行日志

Portainer查看日志
image.png
终端查看日志

image.png3.4Dockerfile在项目中的位置与内容

├── Dockerfile
├── pom.xml
└── src
    └── main
        ├── java
            └── com
                └── routine
                    ├── config
FROM openjdk:8-jre-alpine

ENV SLEEP_TIME 0
ENV PROFILE dev

RUN apk update && apk add ca-certificates && \
    apk add tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

ADD ./target/*.war /app.war

RUN sh -c 'touch /app.war'
VOLUME /tmp
EXPOSE 9600
CMD echo "The application will start in ${SLEEP_TIME}s..." && \
    sleep ${SLEEP_TIME} && \
    java -Xmx1024m -jar -Ddefault.client.encoding="UTF-8" -Dfile.encoding="UTF-8" -Duser.language="Zh" -Duser.region="CN" app.war --spring.profiles.active=${PROFILE}

4.构建vue项目

4.1配置Docker打镜像Shell命令

image.png

#!/bin/bash -l
RE=stage;
PN=citypipe-works-web;                        
docker rm -f $PN;   #首次构建注释                          
docker rmi -f $PN:$RE;    #首次构建注释  
docker build --build-arg PROFILE=$RE  -t $PN:$RE .;           
docker run -d -p 9700:9700 --restart=always --name $PN $PN:$RE;

4.2查看构建日志

image.png

4.3Dockerfile内容

FROM node:lts-alpine as build-stage
ARG PROFILE
WORKDIR /app
COPY package*.json ./
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
RUN cnpm install
COPY . .
RUN npm run build:${PROFILE}

FROM nginx:latest as production-stage
ARG PROFILE
COPY nginx/nginx-${PROFILE}.conf /etc/nginx/nginx.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html

EXPOSE 9700
CMD ["nginx", "-g", "daemon off;"]