docker file容器化部署Jenkins(一)

Jenkins Github地址:https://github.com/jenkinsci/jenkins
国内镜像地址:https://docker.aityp.com/

准备工作

# 创建持久化卷目录
mkdir /data/jenkins_home/Jenkins

拉取镜像
# 由于Jenkins需要JDK,所以直接拉取带有JDK的Jenkins镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:latest-jdk17

# 更改镜像tag
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:latest-jdk17 jenkins-jdk17:2.464

# 创建Jenkins部署脚本
touch /tmp/docker-compose-jenkins.yml
vi /tmp/docker-compose-jenkins.yml

# 将下方Jenkins部署脚本粘贴到docker-compose-jenkins.yml中

version: '3.8'
services:
  jenkins:
    image: jenkins-jdk17:2.464
    container_name: jenkins
    privileged: true
    user: root
    ports:
      - "9090:8080"
      - "50001:50000"
    volumes:
      - /data/jenkins_home/Jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/local/bin/docker
      - /data/jenkins_home/maven/settings.xml:/opt/apache-maven-3.9.9/conf/settings.xml # 这里只提供了 maven 的 settings.xml 主要用于修改 maven 的镜像地址
#    environment:
       - TZ=Asia/Shanghai
#      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 禁止安装向导「如果需要密码则不要配置」docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    restart: unless-stopped
volumes:
  Jenkins:

安装部署

# 执行脚本,进行部署
docker-compose -f /tmp/docker-compose-jenkins.yml up -d   

参数解释:

# image:镜像名称
# container_name:容器名称
 privileged: true  # 授予容器特权模式,允许容器访问宿主机的所有设备
  user: root  # 以root用户身份运行容器内的进程
     - "9090:8080"  # 将宿主机的9090端口映射到容器的8080端口;Web端口
     - "50001:50000"  # 将宿主机的50001端口映射到容器的50000端口
JAVA_OPTS=-Djenkins.install.runSetupWizard=false 这个是一个禁止安装向导,配置为 false 后,则 Jenkins 不会让你设置密码,也不会一开始就安装一堆插件。如果你需要安装向导可以注释掉这个配置。并且当提示你获取密码时,你可以执行;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 获取到登录密码。

访问Jenkins

容器成功运行后访问,http://容器所在机器的IP:9090
进入界面后要求输入登录密码,获取方式:

# 查看生成的密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  • 返回到登录界面输入密码,点击安装推荐的插件,等待插件安装完成(默认会根据地区安装中文语言包)
  • 我这边不创建新用户,点击右下角Skip and continue as admin(使用admin账户继续)
  • Instance Configuration(实例配置)页面中,点击右下角Save and Finish(保存并完成)即可
  • 点击开始使用Jenkins

jenkins构建时间和服务器同步

路径:
Dashboard > Manage > Jenkins Script Console
输入下方指令:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')

如果Result下方的结果栏(Result)中显示下方结果,就证明执行成功了
Result: Asia/Shanghai

设置admin账号密码

路径:右上角账户名旁的三角箭头 > Security > 密码
重新输入密码和确认密码,点击保存即可

至此Jenkins部署完毕

### Jenkins 和 GitLab 实现 Docker 的自动化部署 #### 1. 安装必要的工具和服务 为了实现基于 Jenkins 和 GitLab 的 Docker 自动化部署,首先需要确保环境已经准备好。这包括安装 Docker 引擎以及相关依赖项。 可以通过以下命令完成 Docker 引擎的安装: ```bash sudo apt update && sudo apt upgrade -y sudo apt install docker-ce docker-ce-cli containerd.io -y ``` 此操作会安装最新的稳定版本的 Docker 引擎[^1]。 #### 2. 配置 Jenkins 插件支持 在 Jenkins 中,需安装系列插件来支持与 GitLab 和 Docker 的集成: - **Credentials**: 管理签名证书和其他凭证。 - **GitLab Plugin**: 支持从 GitLab 获取代码并触发流水线。 - **Git and Git Client Plugins**: 提供对 Git 版本控制的支持。 - **Publish Over SSH**: 使用 SSH 协议远程执行脚本来部署应用程序。 - **Maven Integration Plugin**: 如果项目涉及 Maven 构建,则可以利用该插件简化流程。 - **Docker Plugin**: 将 Jenkins 工作流扩展至容器环境中运行任务。 - **docker-build-step Plugin**: 添加自定义 `docker` 命令作为构建阶段的部分。 - **Yet Another Docker Plugin**: 提供额外功能以增强 Docker 资源供给能力。 - **Git Parameter Plugin**: 动态选择分支、标签或其他提交记录进行处理[^3]。 这些插件共同构成了完整的 CI/CD 生态圈。 #### 3. 创建 Java Spring Boot 项目的 Dockerfile 对于典型的 Spring Boot 应用程序来说,其对应的 `Dockerfile` 文件通常位于根目录下并与源文件处于同级别位置。下面是个简单的例子说明如何编写这样的镜像描述文档: ```dockerfile FROM openjdk:17-jdk-slim AS build-stage WORKDIR application COPY . . RUN ./mvnw package -DskipTests FROM openjdk:17-jre-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY --from=build-stage /application/target/myapp.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 上述示例展示了两步式的构建过程——先编译再打包成最终可执行形式;同时指定了启动参数以便优化性能表现[^4]。 #### 4. 设置持续交付管道 (Pipeline) 最后步就是定义具体的 pipeline 行为逻辑。这里给出段 Groovy 脚本片段示意整个工作链条是如何串联起来的: ```groovy pipeline { agent any stages { stage('Checkout') { steps { git branch: 'main', url: 'https://gitlab.com/<your-repo>.git' } } stage('Build Image') { steps { script { def imageName = "my-app:${env.BUILD_ID}" sh """ docker rmi ${imageName} || true docker build -t ${imageName} . """ } } } stage('Test & Push') { steps { withCredentials([usernamePassword(credentialsId: '<credential-id>', usernameVariable: 'USER', passwordVariable: 'PASSWD')]) { sh ''' echo "${PASSWD}" | docker login registry.gitlab.com -u $USER --password-stdin docker push my-app:$BUILD_ID ''' } cleanWs() } } stage('Deploy') { when { expression { env.DEPLOY_ENVIRONMENT ==~ /^(staging|production)$/ } } steps { sshPublisher( publishers: [ sshPublisherDesc( configName: "<server-config>", transfers: [sshTransfer(cleanRemote: false, sourceFiles: "/path/to/deploy.sh")], usePromotionTimestamp: false, verbose: true ) ] ) sh '/bin/bash deploy.sh start' } } } } ``` 这段脚本涵盖了从检出代码到测试验证再到实际推送更新直至正式上线全过程中的各个重要环节[^2]^。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值