jenkins简介
灵活的构建配置
-
Jenkins Shared Libraries
代码重用:通过将常用的Pipeline代码块(如步骤、函数或类)封装在共享库中,可以跨多个Pipeline项目重用这些代码。这避免了在不同Pipeline中重复编写相同逻辑的需要,减少了冗余和潜在的错误。
集中管理:共享库中的代码可以集中存储在一个或多个Git仓库中,这使得团队可以更容易地管理和维护这些代码。团队成员可以通过Git的分支、合并请求等功能协作修改共享库,并确保更改得到适当的审查和测试。
灵活多变:由于共享库可以包含任意Groovy代码,因此它非常灵活。您可以定义各种函数、步骤和类来满足不同的构建、测试和部署需求。这使得Pipeline的编写更加灵活,可以轻松地适应项目的变化。
丰富的插件生态
- Jenkins的插件市场提供了数千个插件,覆盖了代码质量检查、安全扫描、性能测试、部署工具、通知工具等多个方面。
- 这些插件可以无缝集成到Jenkins中,扩展其功能,使其能够适应不同的工作流和工具链。
分布式构建
- Jenkins支持分布式构建,可以将构建任务分配到多个节点(动静态Agent)上执行。
- 这不仅提高了构建速度,还优化了资源使用,特别是在处理大型项目或高并发构建时。
报告和可视化
- Jenkins提供了丰富的报告功能,包括构建结果、测试报告、代码覆盖率等,帮助团队快速了解构建状态和代码质量。
- 它还支持将报告集成到第三方工具中,如SonarQube、Jenkins Dashboard等,以便更直观地展示构建数据。
安全性和权限管理
- Jenkins支持细粒度的权限管理,可以为用户和组分配不同的权限,确保敏感信息的安全。
- 它还提供了多种身份验证方式,如LDAP等,方便与现有的身份认证系统集成。
部署与升级
- 综合考虑还是使用docker部署(个人测试需求),后面有机会再出一期k8s部署吧
- 注意,如果要使用docker in docker,最好版本不要低于
docker-ce-18
docker部署jenkins
- 顺便把docker in docker也弄了
docker run \
--env JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m" \
--name docker-jenkins \
--privileged=true \
--restart=on-failure \
-itd \
-p 8081:8080 \
-p 50000:50000 \
-e JENKINS_OPTS='--prefix=/jenkins' \
-e TZ='Asia/Shanghai' \
-e JENKINS_ARGS='--prefix=/jenkins' \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/sysconfig/docker:/etc/sysconfig/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /apps/app/jenkins/jenkins_home:/var/jenkins_home \
-v /apps/app/jenkins/apache-maven-3.9.6:/var/apache-maven-3.9.6 \
jenkins:2.458
# 解决权限问题
docker exec -it -u root docker-jenkins bash
usermod -aG root jenkins
配置站点
cd jenkins_home
vim hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
</site>
</sites>
升级Jenkins
## 下载完替换容器里这个war包就行
/usr/share/jenkins/jenkins.war
Docker in Docker
- 简单的测试案例
- 记得在jenkins的插件管理中安装 docker插件
#!groovy
@Library('jenkinslib@main') _
// 引入共享库,这里后面再分享
// def tools = new org.devops.tools()
// def build = new org.devops.build()
pipeline {
agent none
stages {
stage('Webbuild') {
// 自定义agent
agent {
docker {
image 'node:10.19.0-alpine'
args '-u 0:0 -w /workspace'
}
}
// 执行
steps {
script {
// tools.PrintMes("NPM构建", 'green')
sh """
id
pwd
ls -lrt
npm -v
"""
}
}
}
stage('build') {
// 自定义agent
agent {
docker {
image 'maven:3.6.3-jdk-8'
args '-v $HOME/.m2:/root/.m2'
}
}
// 执行
steps {
script {
// tools.PrintMes("构建代码", 'green')
sh 'mvn -v'
}
}
}
}
}