05-001 安装/配置 Jenkins

  1. 获取 jenkins 安装包
    wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.4-1.1.noarch.rpm
  1. 安装 jenkins
    yum install -y jenkins-*
  1. 修改端口(可以不修改)
  • 修改这个属性 JENKINS_PORT
vim  /etc/sysconfig/jenkins
image.png
  • 如果 你的https是这样的你需要进行一下配置
image.png
    git config --global http.sslVerify false
  • 如果还不行,请求切换jenkins的启动用户,然后重启jenkins
image.png
  1. 获取初始密码
    cat /var/lib/jenkins/secrets/initialAdminPassword
  1. 修改插件下载和更新地址
    sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && \
    sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
  1. Jenkins->Manage Jenkins-> Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  1. 重启
    http://IP:port/restart
  1. 下载中文汉化插件(如果没有,说明已经安装)

    • Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
  2. 安装插件 (如果没有,说明已经安装)

    • 进入 Jenkins->Manage Jenkins->Manage Plugins-> 可选插件
    • 搜索/安装 "Credentials Binding"


      image.png
    • 搜索/安装 "Git"


      image.png
  3. 添加凭证

    • 进入 Jenkins->Manage Jenkins->Manage Credentials 添加凭证


      image.png
    • 名称解释
      • Username with password:用户名和密码
      • SSH Username with private key: 使用SSH用户和密钥
      • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径
      • 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
      • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
      • Certificate:通过上传证书文件的方式
  4. CentOS 安装 git

    yum install git -y
    git --version
  1. CentOS 安装
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz #下载maven

tar -xzf apache-maven-3.6.3-bin.tar.gz # 解压

mkdir -p /opt/maven #创建目录

mv apache-maven-3.6.3/* /opt/maven #移动文件
  1. 配置环境变量
vi /etc/profile 在文件的末尾

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

source /etc/profile #配置生效

mvn -v #查找Maven版本

  1. 全局工具配置关联JDK和Maven

    • Jenkins->Manage Jenkins->Global Tool Configuration->JDK


      image.png
    • Jenkins->Manage Jenkins->Global Tool Configuration->MAVEN


      image.png
  2. 在项目一级子目录下创建Jenkinsfile文件

image.png
  1. 添加插件 Extended Choice Parameter


    image.png
  2. 进行配置

在配置之前我们先来说一个坑,当我们在配置git中写了远端地址后,会有如下报错:

image.png

这是因为 jenkins 我们 yum 装的运行用户是 jenkins 用户,此处是 jenkins 用户去 git 仓库进行拉取,而 jenkins 用户的话默认是 /bin/false 的,不但不能登录,也没有 git 命令权限,所以肯定是失败的。

解决此问题两种办法:

  • 更改jenkins用户为root用户;

  • 更改jenkins用户为正常的普通用户/bin/bash,将其的公钥加入到git服务器的git用户中。

此处暂时先用第一种解决办法,更改 jenkins 的运行用户为 root 用户,通过如下方式进行更改:

  • 将/etc/sysconfig/jenkins文件由
    image.png

    改为[图片上传失败
    image.png
  • 然后再重启即可。

  1. 添加服务

    • Jenkins->Dashboard->新建item


      image.png
    • 服务配置


      image.png

      image.png

      image.png

      image.png
  2. 安装插件 Publish Over SSH


    image.png
  3. 配置远程登录

  • Jenkins->Manage Jenkins->Configure System


    image.png

    image.png
  1. 安装maven插件
  • 进入 Jenkins->Manage Jenkins->Manage Plugins-> 可选插件


    image.png
  1. 全局属性设置
  • Jenkins->Manage Jenkins->Configure System


    image.png
JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk
M2_HOME
/opt/maven
PATH+EXTRA
/opt/maven/bin
  1. 配置docker
    服务部署服务器, Jenkins 服务器都需要
{
        "registry-mirrors": ["https://l71irppo.mirror.aliyuncs.com"],
        "insecure-registries": ["210.210.210.223:7001"]
}
  • registry-mirrors: 镜像下载地址
  • insecure-registries: docker信任的地址
    • 210.210.210.223:7001 harbor 仓库地址
  1. 创建基础镜像
  • 前置条件, 需要到harbor 建立一个 base 的项目


    image.png
vim Dockerfile
FROM openjdk:8-jdk-alpine
RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig #安装字体
docker build -f ./Dockerfile -t 210.210.210.223:7001/base/base-images:latest .
docker login -u  你的账号 -p 你的密码 210.210.210.223:7001
docker push 210.210.210.223:7001/base/base-images:latest
  1. 创建每个镜像的 Dockerfile


    image.png
FROM 210.210.210.223:7001/base/base-images:latest
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 9207
ENTRYPOINT ["java","-jar","-Duser.timezone=Asia/Shanghai","/app.jar"]
  1. 添加docker 插件


    <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <configuration>
                    <repository>${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
            </plugin>
        </plugins>
    </build>
  1. 添加需要发布工程的存放项目
  • harbor 创建用户


    image.png
  • 创建项目


    image.png
  • 如果怕镜像下载不成功可以公开项目


    image.png
  • 创建GIT凭证


    image.png
  • 创建harbor凭证


    image.png
  1. 配置远程服务器
  • 用xshell等远程攻击连接 jenkins 服务器
ssh-keygen -t rsa
  • 一直回车
  • 拷贝公钥到启动容器的服务器
ssh-copy-id 210.210.210.209
  • 添加远程服务器(服务部署服务器)


    image.png

    image.png
  1. 创建Jenkinsfile


    image.png
  • Jenkinsfile
/*在jenkins->Manage Jenkins->Manage Credentials建立的全局登录git帐号凭证*/
def git_auth="git";
/*git 项目下载地址*/
def git_url="https://200.200.200.79/wutianqi/copote-cloud-hunan.git"

/*镜像版本*/
def tag="latest"
/*harbor地址*/
def harbor_url="210.210.210.223:7001"
/*镜像存放项目名称*/
def harbor_project_name="phjr_hunan"
def harbor_auth="phjr_hunan_harbor"
def phjrstbt_key_209 = "210.210.210.209"
node {
    stage("拉取代码") {
        checkout([$class: "GitSCM", branches: [[name: "*/你在git上配置的分支"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
        echo "拉取成功"
    }

    stage("项目构建,发布"){
      def port = "9200";
      def current_project_name = "copote-hunan-auth"
      sh "mvn -f ./${current_project_name}/pom.xml clean package -U  spring-boot:repackage dockerfile:build"
      echo "项目${current_project_name}构建完毕"
      sh "docker tag ${current_project_name}:${tag}  ${harbor_url}/${harbor_project_name}/${current_project_name}:${tag}"
      echo "项目${current_project_name}镜像打完毕"
      withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: "password", 
        usernameVariable: "username")]) {
                    sh "docker login -u ${username} -p ${password} ${harbor_url}"
                    sh "docker push ${harbor_url}/${harbor_project_name}/${current_project_name}:${tag}"
                    echo "项目${current_project_name} 上传 完毕"
                }
                sh "docker rmi -f ${current_project_name}:${tag}"
                sh "docker rmi -f  ${harbor_url}/${harbor_project_name}/${current_project_name}:${tag}"
                echo "项目${current_project_name} 本地镜像删除完毕"
                echo "/opt/jenkins_deploy.sh $harbor_url $harbor_project_name $current_project_name $tag $port"
                sshPublisher(publishers: [sshPublisherDesc(configName: "${phjrstbt_key_209}",
                                transfers: [sshTransfer(cleanRemote: false, excludes: "",
                                execCommand:"/opt/jenkins_deploy.sh $harbor_url $harbor_project_name $current_project_name $tag $port",
                                execTimeout: 1200000, flatten: false, makeEmptyDirs: false,
                                noDefaultExcludes: false, patternSeparator: "[, ]+", remoteDirectory: "",
                                remoteDirectorySDF: false, removePrefix: "", sourceFiles: "")],
                                usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo "${current_project_name} 启动完成";
           
    }
}

2.. 配置远程服务器的Docker 配置

mkdir -p  /etc/docker && vim /etc/docker/daemon.json
  • jenkins服务器, 服务部署服务器都需要配置
{
        "registry-mirrors": ["https://l71irppo.mirror.aliyuncs.com"],
        "insecure-registries": ["210.210.210.223:7001"]
}

  1. 配置远程服务器 启动文件
vim /opt/jenkins_deploy.sh
  • jenkins_deploy.sh
#!/bin/sh
#接收外部参数
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5
imageName=$harbor_url/$harbor_project_name/$project_name:$tag
echo "$imageName"
#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
  #停掉容器
  docker stop $project_name
  #删除容器
  docker rm -f $project_name
  echo "成功删除容器"
fi
#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w $project_name | awk '{print $3}'`
if [ "$imageId" != "" ] ; then
  #删除镜像
  docker rmi -f $imageId
  echo "成功删除镜像"
fi
# 登录Harbor私服
docker login -u phjr_hunan -p Harbor123456 $harbor_url
# 下载镜像
docker pull $imageName
# 启动容器
docker run -d  --name $project_name -p $port:$port --restart=always --net=host $imageName
echo "容器启动成功"
  • 添加执行权限
chmod +x /opt/jenkins_deploy.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容