Jenkins 是什么
Jenkins®是一个开源的,用 Java 编写的开源持续集成(CI)服务器,可以自托管以自动执行任何项目的构建周期。Jenkins 为软件项目提供 CI 服务,可以通过命令行或 Web 应用程序服务器启动它。
Jenkins 的作用
可以设置 Jenkins 来监视 GitHub,Bitbucket 或 GitLab 等地方的任何代码更改,使用 Maven 和 Gradle 等工具自动进行构建;可以利用 Docker 和 Kubernetes 等容器技术,启动测试,然后在生产中执行回滚或前滚之类的操作。
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
<a name="HSD09"></a>
### 1.准备Compose文件
链接:[https://pan.baidu.com/s/1OhIFSfLEChz0ryJChL1O1A](https://pan.baidu.com/s/1OhIFSfLEChz0ryJChL1O1A) 提取码:dong
```yaml
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts # 镜像`jenkins/jenkins:lts`
container_name: jenkins # 容器名为'jenkins'
restart: always # 指定容器退出后的重启策略为始终重启
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/usr/bin/docker:/usr/bin/docker"
- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
- "./jenkins_home:/var/jenkins_home"
- "/usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64" # JDK安装路径
- "/usr/local/apache-maven-3.8.1:/usr/local/apache-maven-3.8.1" # MAVEN安装路径
environment: # 设置环境变量
TZ: Asia/Shanghai
LANG: en_US.UTF-8
user: root # 使用root权限运行容器
ports: # 映射端口
- "8080:8080"
2.启动项目在portainer查看默认密码
若启动时出现镜像拉取慢或拉取不到,可以参考Docker基本使用配置源
docker-compose -f docker-compose-jenkins.yml -p jenkins up -d
踩坑记录
安装报WARNING hudson.model.UpdateCenter#updateDefaultSite: Upgrading Jenkins. Failed 是因为容器连不上网,可以将网络模式调整为host模式——>network_mode: “host”
3.访问8080端口复制默认密码
4.安装基础插件
5.创建账户开始使用
Jenkins的使用
0.配置JDK与Maven环境
1.创建任务
2.配置Gitlab地址与账号
3.构建springboot项目
3.1配置Maven打包与Docker打镜像Shell命令
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.查看构建日志
3.3.查看项目运行日志
3.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命令
#!/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查看构建日志
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;"]