企业级——自动化CI/CD之jenkins 01

介绍

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

以上介绍引自官方

安装

本次安装使用docker运行ubuntu+openjdk-17作为基础镜像,挂载jenkins.war包和所需maven、nodejs、golang等第三方库。主要解决编译时对各个工具的需求,减少基础镜像的重复编译以及方便jenkins升级(只下载war包)。

还有一种编译方式,在Jenkinsfile各个阶段,使用docker镜像进行按需编译,比如我需要编译golang代码,我可以使用golang基础镜像进行源码编译。本次不做介绍。

  1. 准备运行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 .
  1. 下载jenkins.war, apache maven, apache ant

选择Generic Java package (.war)

  1. 启动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
  1. 向导安装

解锁Jenkins,需要按照提示文件,贴入内容

选择推荐的插件

默认插件安装进行中...

  1. 跳过新账号添加,使用admin账号, 记得登陆后需要修改密码,否则再次登陆还是需要输入安装时的长字符串

暂不创建,使用admin账号

  1. 实例配置,选择默认即可

选择默认

构建

  1. 修改之前演示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>
  1. 配置jenkins的maven,ant配置 Dashboard > Manage Jenkins > Tools

配置本地maven,ant

  1. 创建job,采用自由风格

create a job

选择自由风格,注意黄色使用Pipeline模式(本次不考虑)

设置丢失模式,防止构建消耗磁盘空间

添加仓库

增加gitea账号

选择上一步添加的账号

选择分支,注意默认是master,需要修改仓库对应的分支,本次需要修改为main

选择maven编译

注意:下拉选择maven本地安装,不需要以mvn开头,填写内容为输入的参数

立即触发

  1. 编辑结果

查看日志,发布成功

可以看到最新的快照版本

参考

以上内容已经分享到百度网盘,可以下载参考,私信回复"自动化CI/CD之jenkins"

链接: https://pan.baidu.com/s/105kLtbsOj1P1l1Eut-o-6g?pwd=

热门相关:你是我生命的四分之三   秦吏   神话版三国   新年轻妈妈[未删减版]   呆萌小青梅:妖孽竹马太腹黑