首页 > 其他分享 >企业级——自动化CI/CD之jenkins 01

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

时间:2024-07-22 22:44:01浏览次数:7  
标签:CI 01 openjdk 企业级 maven apache jenkins true war

介绍

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 <[email protected]>

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=

标签:CI,01,openjdk,企业级,maven,apache,jenkins,true,war
From: https://www.cnblogs.com/clibing/p/18317145

相关文章

  • [COCI2015-2016#1] UZASTOPNI 题解
    前言题目链接:洛谷。题意简述一棵有根树,节点数\(n\leq10^5\),每个点有权值\(v_i\leq2000\),现在选出一些点,满足:一个点的父亲点若未被选择则其不能被选择。所选点的集合内不能有相同的权值。对于每一个选择的点,其子树中所有被选择点的权值必须可以构成公差为\(1\)的等......
  • Visual Studio 2019使用SVN管理源代码
    原文链接:https://blog.csdn.net/g313105910/article/details/119964508第一章、下载安装VisualSVNforVisualStudio2019https://www.visualsvn.com/CSDN下载地址https://download.csdn.net/download/g313105910/21698281安装 完成 VisualStudio2019中已经包含了A......
  • BUUCTF [安洵杯 2019]easy_web
    上来看到url两个参数直接sqlmap挂着扫,dirsearch和githack扫都没东西,然后sqlmap也没有成果ctrl+U查看源码发现以base64编码输出了文件的内容,返回看url只有img参数有东西这个东西看着就像base64编码,解码两次得到一串数字,可能还是什么东西我又解了一次,发现是十六进制转字符......
  • 2024 ICPC ShaanXi Provincial Contest 换座位 sol
    \(\text{Link}\)自然地想到\(i\)向\(a_i\)连边。随便造一组强一点的数据:103121010892082图大概长这样容易发现每个\(i\)有且仅有\(1\)条出边。发现图中\(1,2,3\)这\(3\)个点组成了一个环。在这个环上,每个人都能做到自己心仪的位置上,所以这个环对......
  • Numercial result of irRMILrp-CGP
    ......
  • P3572 [POI2014] PTA-Little Bird
    原题链接题解首先,考虑接下来往哪颗树飞是很困难的,因为当前的决策会影响之后的决策但是如果考虑到达当前树从哪里飞过来就比较好了,因为无后效性接着我们可以暴力做法,遍历每棵树从前\(k\)个树飞过来的值,然后取最小的那个,但是这样显然会超时,所以我们优化一下有哪些值得被优化......
  • [极客大挑战 2019]BabySQL
    [极客大挑战2019]BabySQL判断类型SQL关键字绕过,这道题可以双写绕过。username=1'or1=1#password=1'or1=1#得到报错:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMariaDBserverversionfortherightsyntaxtousenear'1=......
  • 28449-2018 测评过程指南小结
    28449测评过程指南适用于测评机构、定级对象的主管部门及运营使用单位对定级对象安全等级保护状况开展安全测试评价等级测评工作要求:(附录C)1依据标准,遵循原则2恰当选取,保证强度3规范行为,规避风险存在的风险:(标准P1和课本108)1.影响系统正常运行2.泄露敏感信息3.......
  • 像乌鸦一样思考01_玻璃杯罩住的高低蜡烛谁先灭?
    大致场景大致原理蜡烛燃烧需要氧气,同时会释放二氧化碳但蜡烛燃烧特定场景下,释放的二氧化碳温度很高,密度比空气底所以就会有上传的趋势(水高温变成水蒸气也是会往上升的)持续的燃烧,二氧化碳不停的往上聚集,最终高蜡烛周围的空气先被二氧化碳包围,因为没有氧气所以就先熄灭了室......
  • [CEOI2018] Lottery 题解
    前言题目链接:洛谷。题意简述给出序列\(a_1\ldotsa_n\)和常数\(l\leqn\),定义:\[\operatorname{dis}(i,j)=\sum_{k=0}^{l-1}[a_{i+k}\neqa_{j+k}]\qquad(i,j\in[1,n-l+1])\]每次询问一个\(k\),求对于所有\(i\in[1,n-l+1]\),求\(\sum......