Jenkins安装
发表于|更新于
|总字数:1.6k|阅读时长:8分钟
[!jenkins文章分为三部分]
第一部分为docker安装Jenkins与常用插件使用,此文章
第二部分为运行pipeline并通过k8s pod打包 Jenkins-pipeline使用
第三部分为,pipeline高阶使用,如map,共享库,参考 Jenkins-pipeline进阶使用
1 安装
Attention
这里使用的lts镜像,官网查的版本不准,建议去这里查[Jenkins lts 更新记录](https://www.jenkins.io/changelog-stable/ 把2.492.3换成查到的最新版本,如果需要jdk8就改成lts-jdk8
-如果不需要集成k8s,取消注释,准备好二进制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| services: jenkins: image: ccr.ccs.tencentyun.com/ccops/all:jenkins-2.492.3-lts-jdk17 user: root container_name: jenkins restart: always environment: TZ: "Asia/Shanghai" JENKINS_UC: "https://mirrors.tuna.tsinghua.edu.cn/jenkins/" JENKINS_UC_DOWNLOAD: "https://mirrors.tuna.tsinghua.edu.cn/jenkins/" JAVA_OPTS: "-Dhudson.model.DownloadService.noSignatureCheck=true" ports: - "8080:8080" - "50000:50000" volumes: - ./data:/var/jenkins_home - /etc/localtime:/etc/localtime
|
1.1 准备国内源,防止插件安装不上
2.492.1换成对应的版本,我这是2.492.3,但是没有,只能先用这个
如果版本不对应插件可能安装不上
1 2 3 4 5 6 7 8
| cat data/hudson.model.UpdateCenter.xml <?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>https://mirrors.huaweicloud.com/jenkins/updates/dynamic-stable-2.492.1/update-center.json</url> </site> </sites>
|
2 登陆
查看密码
1 2
| cat data/secrets/initialAdminPassword 4c0418dc42524016beb2aa7a67196693
|

登录后选择自己安装插件,先安装这几个

3 插件
3.1 安装
http://jenkins:8080/manage/pluginManager/available
| 名称 |
作用 |
| Pipeline: Stage View |
展示pipeline步骤 |
| Git |
通用clone代码插件 |
| Git Parameter |
能够与 Git 插件结合使用,动态获取 Git 项目中分支信息 |
| Docker Pipeline |
构建隐藏docker build,账号密码等命令 |
| Rebuilder |
重复上次构建 |
| AnsiColor |
扩展 echo -e指令,输出增加颜色。 |
| Config File Provider |
存储 k8s Deployment 模板等信息 |
| Pipeline Utility Steps |
操作文件的插件,与Config File Provider结合使用 |
| Kubernetes |
使用 Kubernetes 集群运行 Jenkins agent |
| Lark Notice Plugin |
可选,钉钉,飞书告警插件,不支持在线安装,点击这里安装 |
| Pipeline: Groovy Libraries |
可选,共享 Pipeline 脚本 |
| Job Configuration History Plugin |
pipeline回滚功能 |
| Extended Choice Parameter |
支持多选,但现在有漏洞并且不维护,2025年4月17日 |
| Active Choices |
更高级的扩展选项,也支持多选,但配置复杂 |
| Publish Over SSH |
支持远程传输文件与执行命令 |
| Material Theme与Blue Ocean |
美化页面,但Blue Ocean支持功能比较少,比如不支持Active Choices插件 |
3.2 插件使用
3.2.1 Git
pipeline 例子
1
| git(credentialsId: "${GIT_ID}", url: "$GIT_URL", branch: "${BRANCH_NAME}", changelog: true, poll: false)
|
3.2.2 AnsiColor
3.2.3 Config File Provider
http://jenkins:8080/manage/configfiles/

3.2.4 Pipeline Utility Steps
pipeline例子
1 2 3 4 5 6 7 8 9 10 11 12
| onfigFileProvider([configFile(fileId: "${KUBERNETES_DEPLOYMENT_ID}", targetLocation: "deployment.yaml")]){ script { // 替换deployment文件中的变量 deploy = readFile encoding: "UTF-8", file: "deployment.yaml" deployfile = deploy.replaceAll("#APP_NAME","${APP_NAME}") .replaceAll("#APP_REPLICAS","${KUBERNETES_APP_REPLICAS}") .replaceAll("#APP_IMAGE_NAME","${dockerImageName}") // 生成新的 Kubernetes 部署文件 writeFile encoding: 'UTF-8', file: './deploy.yaml', text: "${deployfile}" sh "cat deploy.yaml" } }
|
3.2.5 Kubernetes
3.2.5.1 添加kubeconfig

3.2.5.2 添加集群

选择刚才添加的凭据

测试

3.2.5.3 pod模板
这里建议自己制作镜像,把maven,kubelet什么的放进来,方便维护,用k8s与不用k8s好切换
jdk版本按需选择
1 2 3 4 5 6 7 8 9 10 11
| cat Dockerfile FROM jenkins/inbound-agent:latest-jdk17 ADD make/kubectl /usr/bin/kubectl ADD make/apache-maven-3.9.9 /usr/local/maven ENV MAVEN_HOME=/usr/local/maven ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH ENV TZ=Asia/Shanghai USER root RUN cp /usr/share/zoneinfo/${TZ} /etc/localtime \ && echo "${TZ}" > /etc/timezone USER jenkins
|
maven配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| cat make/apache-maven-3.9.9/conf/settings.xml <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"> <localRepository>/data/repo</localRepository> <pluginGroups>
</pluginGroups> <proxies>
</proxies> <servers>
</servers> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <profiles> <profile> <id>jdk-17</id> <activation> <activeByDefault>true</activeByDefault> <jdk>17</jdk> </activation> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion> </properties> </profile> </profiles> </settings>
|
pod模板
- 为了演示这里单独加个docker in docker容器,也可以制作all镜像的时候安装docker
- 如果加容器了就需要pipeline里添加 container(‘docker’),要不然默认用jnlp容器执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| apiVersion: v1 kind: Pod metadata: labels: app: jenkins-slave spec: securityContext: runAsUser: 0 privileged: true nodeSelector: node-role.kubernetes.io/jenkins-slave: "yes" containers: - name: jnlp tty: true workingDir: /home/jenkins/agent image: ccr.ccs.tencentyun.com/ccops/all:inbound-jdk17-all volumeMounts: - name: data mountPath: /data/repo - name: docker workingDir: /home/jenkins/agent image: ccr.ccs.tencentyun.com/ccops/all:docker-28.0.4-cli command: ["cat"] tty: true volumeMounts: - mountPath: /var/run/docker.sock name: dockersock readOnly: true - mountPath: /etc/docker/daemon.json name: dockerdaemon readOnly: true volumes: - name: data nfs: path: /data/nfs_data server: 192.1.1.1 - name: dockersock hostPath: path: /var/run/docker.sock - name: dockerdaemon hostPath: path: /etc/docker/daemon.json
|
这里添加

3.2.6 Lark Notice Plugin
参考,很简单
3.2.7 Extended Choice Parameter
支持多选,但有漏洞并且不在维护
1 2 3 4 5 6
| pipeline { ...... parameters { extendedChoice name: 'APP_NAME', type: 'PT_CHECKBOX', description: '请勾选所要发布的项目模块', quoteValue: false, saveJSONParameterToFile: false, value: 'app1,app2', visibleItemCount: 7, multiSelectDelimiter: ',', defaultValue: 'app1' } ......
|
3.2.8 Active Choices
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| properties([ parameters([ [ $class: 'ChoiceParameter', choiceType: 'PT_CHECKBOX', // 复选 name: 'APP_NAME', description: '选择应用', script: [ $class: 'GroovyScript', // Groovy脚本 script: [ classpath: [], sandbox: true, // 要返回的结果,写在一行 script: "return ['app1', 'app2']" ] ] ] ]) ]) pipeline { ...... }
|
3.2.9 Publish Over SSH
3.2.9.1 添加远程主机

3.2.9.2 pipeline使用
Info
- {hostName} 可以写成host-213
- xecCommand 要执行的命令
- remoteDirectory 要创建的目录,在/data/app下
- sourceFiles jenkins上文件路径
- verbose 是否开启ssh执行日志,debug用
1 2 3
| sshPublisher(publishers: [sshPublisherDesc(configName: "${hostName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """ docker-compose -f /data/app/${appName}/docker-compose.yml up -d """, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${appName}/", remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'docker-compose.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
|