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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容