企业级——自动化CI/CD之jenkins 01
介绍
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
以上介绍引自官方
安装
本次安装使用docker运行ubuntu+openjdk-17作为基础镜像,挂载jenkins.war包和所需maven、nodejs、golang等第三方库。主要解决编译时对各个工具的需求,减少基础镜像的重复编译以及方便jenkins升级(只下载war包)。
还有一种编译方式,在Jenkinsfile各个阶段,使用docker镜像进行按需编译,比如我需要编译golang代码,我可以使用golang基础镜像进行源码编译。本次不做介绍。
- 准备运行war的环境镜像, 以ubuntu为基础构建openjdk:17镜像
FROM hub.atomgit.com/amd64/ubuntu:23.10
MAINTAINER clibing <wmsjhappy@gmail.com>
ARG JDK_VERSION="17"
ARG JAVA_OPTS="-XX:+PrintFlagsFinal"
ARG JAVA_GC_LOG="/var/log/jvmgc.log"
ENV JAVA_GC_LOG ${JAVA_GC_LOG}
ENV JAVA_HOME /usr/lib/jvm/default-jvm
# refs => http://calvin1978.blogcn.com/articles/jvmoption-7.html
ENV JAVA_OPTS -Djava.security.egd=file:/dev/./urandom \
-XX:AutoBoxCacheMax=20000 \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
-XX:+AlwaysPreTouch \
-XX:+PrintCommandLineFlags \
-XX:+PrintGCDateStamps \
-XX:+PrintGCDetails \
-XX:+PrintGCApplicationStoppedTime \
-Xloggc:${JAVA_GC_LOG} \
${JAVA_OPTS}
RUN apt update -y
# RUN apt -y install fonts-dejavu fontconfig procps
RUN apt -y install libnss3 iputils-ping net-tools
# RUN apt -y install fonts-dejavu fontconfig procps openjdk-${JDK_VERSION}-jdk libnss3 iputils-ping net-tools \
RUN apt -y install openjdk-${JDK_VERSION}-jdk \
&& ln -s /usr/lib/jvm/java-${JDK_VERSION}-openjdk-* /usr/lib/jvm/default-jvm
RUN rm -rf /var/cache/apk/*
ENV PATH=${JAVA_HOME}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WORKDIR /workdir
CMD ["/bin/bash"]
编译hub.linuxcrypt.cn/clibing/openjdk:17
#########################################################################
# File Name: build.sh
# Author: clibing
# mail: wmsjhappy@@gmail.com
# Created Time: 五 7/19 09:28:24 2024
#########################################################################
#!/bin/bash
export JDK_VERSION=17
docker buildx build --platform=linux/amd64,linux/arm64/v8 \
--build-arg JDK_VERSION=$JDK_VERSION \
-t hub.linuxcrypt.cn/clibing/openjdk:$JDK_VERSION \
--push \
-f Dockerfile .
- 下载jenkins.war, apache maven, apache ant
- apache ant: https://mirrors.tuna.tsinghua.edu.cn/apache/ant/binaries/apache-ant-1.10.13-bin.tar.gz
- apache maven: https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz
- jenkins.war: https://www.jenkins.io/download/
选择Generic Java package (.war)
- 启动jenkins
当前项目目录结构
.
├── data
│ ├── build 编译目录,只是保留
│ ├── m2repository maven/conf/settings.xml中配置的localRepository位置
│ └── sdk
│ ├── ant 编译依赖的工具ant
│ ├── go golang sdk
│ ├── install 下载的 tar.gz文件
│ └── maven apache maven
├── docker-compose.yml docker编排
├── jenkins.war jenkins.war包
└── ubuntu.openjdk 基础镜像制作
├── Dockerfile
└── build.sh
docker-compose.yaml编排文件
name: jenkins
services:
jenkins:
image: hub.linuxcrypt.cn/clibing/openjdk:17
container_name: jenkins
init: true # fix zombie process 需要启用init,防止编译时执行shell产生僵尸进程
privileged: true
security_opt:
- no-new-privileges:true
ports:
- 8080:8080
user: root
environment:
JENKINS_HOME: /data/jenkins
M2_HOME: /data/sdk/maven
GO111MODULE: on
GOPATH: /data/build/go
GOPROXY: https://goproxy.cn,https://proxy.golang.org,direct
volumes:
- ./jenkins.war:/opt/jenkins.war # 离线war包
- ./data/jenkins:/data/jenkins
- ./data/sdk:/data/sdk # apache maven, go sdk, other..
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.enable=true"
- "traefik.http.routers.jenkins.rule=Host(`build.clibing.com`)"
- "traefik.http.routers.jenkins.tls=true"
networks:
- traefik
- spider-cluster
command: "java -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -jar /opt/jenkins.war --httpPort=8080"
networks:
traefik:
external: true
spider-cluster:
name: spider-cluster
external: true
- 向导安装
解锁Jenkins,需要按照提示文件,贴入内容
选择推荐的插件
默认插件安装进行中...
- 跳过新账号添加,使用admin账号, 记得登陆后需要修改密码,否则再次登陆还是需要输入安装时的长字符串
暂不创建,使用admin账号
- 实例配置,选择默认即可
选择默认
构建
- 修改之前演示demo的pom.xml,修改localhost为本机ip地址(主要解决容器内对服务的访问),并推送到gitea仓库
<distributionManagement>
<repository>
<id>local-releases</id>
<url>http://192.168.1.243:8081/repository/release/</url>
</repository>
<snapshotRepository>
<id>local-snapshots</id>
<url>http://192.168.1.243:8081/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>local-repo</id>
<url>http://192.168.1.243:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
- 配置jenkins的maven,ant配置 Dashboard > Manage Jenkins > Tools
配置本地maven,ant
- 创建job,采用自由风格
create a job
选择自由风格,注意黄色使用Pipeline模式(本次不考虑)
设置丢失模式,防止构建消耗磁盘空间
添加仓库
增加gitea账号
选择上一步添加的账号
选择分支,注意默认是master,需要修改仓库对应的分支,本次需要修改为main
选择maven编译
注意:下拉选择maven本地安装,不需要以mvn开头,填写内容为输入的参数
立即触发
- 编辑结果
查看日志,发布成功
可以看到最新的快照版本
参考
以上内容已经分享到百度网盘,可以下载参考,私信回复"自动化CI/CD之jenkins"