Docker搭建jenkins实现持续集成持续交付

二、基于docker-compose安装jenkins

version: '3.1'
services:
  jenkins:
    restart: always
    image: jenkinsci/jenkins
    container_name: jenkins
    ports:
      # 发布端口
      - 8080:8080
      # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信
      - 50000:50000
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/jenkins_home

若通过docker-compose up过程中出现Docker 数据卷问题,可通过下面命令结局:

chown -R 1000 /usr/local/docker/jenkins/data

1. Jenkins 首次启动

第一次启动jenkins时,可以通过docker logs jenkins 查看初始密码。

cat /usr/local/docker/jenkins/data/secrets/initialAdminPassword

2. 自定义安装插件

image

一定要安装的插件

Dashboard View
Publish over SSH
Maven Integration plugin
Locale 本地化插件 (显示中文)
Choice Parameter 动态参数插件(支持一键回滚)

3. 安装本地化插件后的设置

系统管理-》系统设置-》 Locale Default -> 输入 zh_CN ->Ignore browser preference and force this language to all users(打√)

上传javamaven 并解压

javamaven的jar上传到jenkins的宿主机路径:/usr/local/docker/jenkins/data目录。并进行解压。

解压:

tar -zxvf xxx.tar.gz

删除压缩包:
rm -fr xxx.tar.gz

4. 在jenkin页面配置jdkmaven

系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增jdk

JDK 别名: JDK 1.8.0.152 X64

JAVA_HOME: 系统管理-》系统设置-》主目录:/var/jenkins_home/jdk1.8.0_152

安装maven

Name :Apache Maven 3.5.3

MAVEN_HOME: /var/jenkins_home/apache-maven-3.5.3

保存

5. 配置 Jenkins 的 GitLab SSH 免密登录

  • 交互式进入 Jenkins 容器

docker exec -it jenkins /bin/bash

  • 生成 SSH KEY

ssh-keygen -t rsa -C "[email protected]"

  • 查看公钥

cat /var/jenkins_home/.ssh/id_rsa.pub

  • 复制公钥到 GitLab

gitlab -》 设置 -》 SSH秘钥

  • 手动克隆一次项目,该步骤的主要作用是为了生成和服务器的验证信息

克隆之前,cd,后再 git clone gitlab项目地址
此操作是为了拿到 cd .ssh/目录下的known_hosts文件。

6. 配置 Publish over SSH

  • 系统管理-》系统设置-》Publish over SSH
image

其中 Remote Directory 是指 Jenkins 可以在目标服务器操作的目录。
在配置的远程服务器上配置usr/local/jenkins目录。

  • 测试是否能够正常通信

Test Configuration

7. 在jenkins配置项目

  • New Item -》 myshop-dependencies-》 丢弃旧的构建 :10 -》 源码管理: git : 项目的gitlab地址 -》 立即构建

  • gitlab为项目打标签(参数化构建,为了版本回滚)

进入项目-》新建标签 :v1.0.0

8. 配置正式构建

项目-》配置-》源码管理:None;
参数化构建过程-》添加参数:Extended Choice Parameter -》 Name: RELEASE_VERSION-》 Base Parameter Types: Single Select -》Choose Source for Value:Grovy Script :

def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/myshop-operation;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
ver_keys.execute().text.tokenize('\n')

Post Steps(构建步骤)-》Add post-build step -》 Excute shell

echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/myshop-dependencies
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean install

9. Send files or execute commands over SSH(发送文件或执行远程命令)

  • Source files:需要传输到远程目标服务器的文件
    **/*.jar,docker/**
  • Remove prefix:删除前缀。比如传输 **/*.jar,我们打包的 .jar 文件是在target 目录下的,传输时会一并创建target 目录,如果不希望创建 target 目录,则可以使用该参数屏蔽掉这些前缀文件夹。
  • Remote directory:在远程目标服务器创建操作目录myshop-service-user-provider
  • Exec command:在远程目标服务器执行控制台命令
cd /usr/local/jenkins/myshop-service-user-provider
cp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.10.133:5000/myshop-service-user-provider:v1.0.0 .
docker push 192.168.10.133:5000/myshop-service-user-provider:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f

准备工作完成之后就可以对项目进行构建,参数化构建时,第一次构建时,要确认使用groovy 脚本进行构建

  • 构建项目-》Build With Parameters -》 In-Process Script Approval-》Approve -》 然后再重新进行构建

你可能感兴趣的:(Docker搭建jenkins实现持续集成持续交付)