一. 安装Jenkins
Jenkins官方文档:https://www.jenkins.io
- 下面采用Linux进行安装,其它安装方式请参考官方文档
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install fontconfig java-17-openjdk
sudo yum install jenkins
sudo systemctl daemon-reload
- 使 Jenkins 服务在启动时启动
sudo systemctl enable jenkins
- 启动 Jenkins 服务
sudo systemctl start jenkins
- 检查 Jenkins 服务的状态
sudo systemctl status jenkins
如果所有内容都已正确设置,您应该会看到如下输出:
PS:需要关闭防火墙,Jenkins默认端口为8080,如果8080端口被占用,需要更改Jenkins的端口号
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
- 浏览器访问http://ip:port,密码可以通过Jenkins日志进行查看(sudo systemctl status jenkins)
-
插件二选一(安装推荐的/自行安装插件)
-
创建第一个管理员用户
二. 配置相关
提示:您的Linux上需要安装上JDK、Docker、Maven、Git,并配置上环境变量
- 按照以下截图配置
- 这个地方可以添加凭据,录入Git的用户名、密码和描述即可,ID不用填写,保存成功后自动出现(凭据ID)
三. 使用脚本方式实现功能
提示:这里使用的gitee做的代码托管
- 在项目根目录添加Dockerfile文件,根据实际情况替换里面的内容,然后上传到gitee
FROM registry.cn-hangzhou.aliyuncs.com/public-toolbox/maven:3.8.3-openjdk-8-aliyun AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN ["/usr/local/bin/mvn-entrypoint.sh","mvn","-f","/home/app/pom.xml","clean","package","-Dmaven.test.skip=true"]
FROM registry.cn-hangzhou.aliyuncs.com/public-toolbox/openjdk:8-jdk-alpine
COPY --from=build /home/app/target/jenkins-0.0.1-SNAPSHOT.jar /usr/local/lib/jenkins-0.0.1-SNAPSHOT.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/usr/local/lib/jenkins-0.0.1-SNAPSHOT.jar"]
- 新建管道,名称自定义
其它配置自己看着配,我这里只配置了个参数
- 编写流水线脚本,这里我使用了阿里云镜像仓库作为托管,需要先在阿里云镜像服务上创建命名空间
pipeline {
agent any
environment {
GIT_URL = '你的仓库地址'
GIT_BRANCH_NAME = '*/master'
GIT_CREDENTIALS_ID = 'Git的凭据ID'
DOCKER_REGISTRY = "阿里云镜像仓库地址"
DOCKER_USERNAME = "阿里云镜像仓库用户名"
DOCKER_PASSWORD = "阿里云镜像仓库密码"
DOCKER_NAMESPACE = '阿里云镜像仓库命名空间'
DOCKER_IMAGE_NAME = '镜像名称'
DOCKER_DEF_TAG = '默认版本号'
}
//调用前面配置的参数
parameters {
string(name: 'IMAGE_TAGS',defaultValue: '',description: '自定义镜像标签')
}
stages {
stage('Git拉取代码') {
steps{
//从gitee拉取分支代码
checkout([$class: 'GitSCM',
branches: [[name: env.GIT_BRANCH_NAME]],
userRemoteConfigs: [[url: env.GIT_URL,
credentialsId: env.GIT_CREDENTIALS_ID]]])
}
}
stage('选择标签') {
steps {
script {
//获取当前构建的自定义tag
def imageTags = params.IMAGE_TAGS
echo "Self defined tag: ${imageTags}"
//如果自定义参数不为空,则使用自定义参数作为版本号,否则使用默认版本号
if (imageTags != '') {
echo "Building with self defined tag: ${imageTags}"
env.BUILD_TAG = params.IMAGE_TAGS
} else {
echo "No tag specified, using default tag: latest"
env.BUILD_TAG = env.DOCKER_DEF_TAG
}
}
}
}
stage('构建及推送镜像') {
when {
expression { return env.BUILD_TAG != '' }
}
steps {
sh """
docker build -t ${env.DOCKER_IMAGE_NAME}:${env.BUILD_TAG} .
docker login -u ${env.DOCKER_USERNAME } -p ${env.DOCKER_PASSWORD } ${env.DOCKER_REGISTRY }
docker tag ${env.DOCKER_IMAGE_NAME}:${env.BUILD_TAG} ${env.DOCKER_REGISTRY}/${env.DOCKER_NAMESPACE}/${env.DOCKER_IMAGE_NAME}:${env.BUILD_TAG}
docker push ${env.DOCKER_REGISTRY}/${env.DOCKER_NAMESPACE}/${env.DOCKER_IMAGE_NAME}:${env.BUILD_TAG}
"""
}
}
}
}
- 点击运行,输入版本号即可
- 成功后即可在阿里云镜像仓库查看自己上传的镜像