腾讯云的devops自动化部署代替jenkins

Posted 丁少华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯云的devops自动化部署代替jenkins相关的知识,希望对你有一定的参考价值。

起因

jenkins太耗内存了,经常导致服务器崩。
了解到devOps也是做类似的服务的,遂用之。
serverless framework也可以做这个,但是截至目前,只能够打包node项目。

devOps服务器运营商基本都提供,比如腾讯云、阿里云、亚马逊云等,使用方法大致相同

流程配置

devops核心内容就是pipeline 即流程配置。下边提供几个常用的配置

前端项目 推送到服务器

这里拿一个react项目,打包完 将内容推送到服务器的home文件夹内

pipeline 
  stages 
    stage(\'获取仓库代码\') 
      steps 
        checkout([
          $class: \'GitSCM\',
          branches: [[name: GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: GIT_REPO_URL,
            credentialsId: CREDENTIALS_ID
          ]]])
        
      

      stage(\'安装依赖\') 
        steps 
          sh \'yarn\'
        
      

      stage(\'打包产物\') 
        steps 
          sh \'yarn build\'
          sh "tar -zcvf tmp.tar.gz build"
        
      

      stage(\'部署\') 
        steps 
          echo \'部署中...\'
          script 
            def remote = [:]
            remote.name = \'腾讯云\'
            remote.allowAnyHosts = true
            remote.host = \'82.157.146.87\'
            remote.port = 22
            remote.user = \'root\'

            // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,
            // 参考:https://coding.net/help/docs/project-settings/credential.html#faq
            withCredentials([usernamePassword(credentialsId: \'6de4c5ea-8436-4ed5-9e33-2b737f6f3032\', passwordVariable: \'password\', usernameVariable: \'userName\')]) 
              remote.user = "$userName"
              remote.password = "$password"
              // SSH 上传文件到远端服务器 的home目录下
              sshPut remote: remote, from: \'./tmp.tar.gz\', into: \'/home/tmp.tar.gz\'
              // 创建一个文件夹,讲解压缩的文件放进去 
              sshCommand remote: remote, sudo: true, command: "mkdir -p /home/build"
              sshCommand remote: remote, command: "tar -zxf /home/tmp.tar.gz -C /home/build"
            
          

          echo \'部署完成\'
        
      

    
  

如果想直接部署到nginx服务器根目录 这样更简单

Docker环境搭建Jenkins+gitlab+maven自动打包 部署容器

 

宿主机安装docker(省略)

宿主机安装maven

下载二进制包解压到/var/docker_data/jenkins/jenkins_home下面

https://maven.apache.org/download.cgi

Jenkins镜像安装

  下载Jenkins镜像(一般都是Ubuntu版)

FROM jenkins

USER root
#清除了基础镜像设置的源,切换成腾讯云的jessie源
#使用非腾讯云环境的需要将 tencentyun 改为 aliyun
RUN echo \'\' > /etc/apt/sources.list.d/jessie-backports.list \\
  && echo "deb http://mirrors.tencentyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \\
  && echo "deb http://mirrors.tencentyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \\
  && echo "deb http://mirrors.tencentyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安装缺少的包
RUN apt-get update

ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

  

   制作镜像

docker build -t jenkins:ubuntu .

  启动镜像

docker run --name jenkins --privileged -d -p 8080:8080 -p 5000:5000 -v /etc/localtime:/etc/localtime -v /var/docker_data/jenkins/jenkins_home:/var/jenkins_home -v /var/docker_data/jenkins/settings:/var/settings  -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/jenkins_home/maven/bin  c2997ba18d6c

  目录说明:

/var/jenkins_home:Jenkins用户的家目录
/var/jenkins_home/workspace:Jenkins主要工作目录,创建的视图、gitlab拉下来的代码都在这个下面

  先按推荐安装再安装插件:

  • Maven Integration plugin
  • docker-build-step
  • Docker plugin
  • Gitlab Hook Plugin
  • GitLab Plugin

  Jenkins系统配置:

  系统管理-->系统设置

  配置远程主机的账号密码

配置gitlab

 

 GitLab API token获取

在gitlab页面中鼠标点击右上角头像点击settings,访问令牌创建个人访问令牌

Jenkins全局工具配置

系统管理-->全局工具配置

 配置jdk路径

jenkins镜像中的jdk应该是yum安装的,所有路径需要自己去找(/usr/lib/jvm/java-8-openjdk-amd64)

root@68decdef1ec3:~# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 17  2018 /usr/bin/java -> /etc/alternatives/java
root@68decdef1ec3:~# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Jul 17  2018 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

  

maven配置(这个是从宿主机映射过来的)

 

配置凭据

创建自动打包job

源码管理

构建触发器

构建build(打包)根据pom文件打包(clean package -Dmaven.test.skip=true)

最后运行脚本

参考别人脚本

echo \'================打包完成,开始复制================\'
cd /var/lib/jenkins/workspace/gpsserver
scp Dockerfile-gps  root@hadoop1:/data/public/gpsserver/
scp server-gps/target/gpserver.jar  root@hadoop1:/data/public/gpsserver/
echo \'================复制文件完成================\'
ssh root@hadoop1 << remotessh
echo \'================进入主机hadoop1 shell================\'
cd /data/public/gpsserver
echo \'================停止容器 gpsserver================\'
sudo  docker stop gpsserver
echo \'================删除容器 gpsserver================\'
sudo  docker rm gpsserver
echo \'================删除镜像 gpsserver:latest================\'
sudo  docker rmi gpsserver:latest
echo \'================build 镜像 gpsserver:latest================\'
sudo docker build -t gpsserver:latest -f ./Dockerfile-gps .
echo \'================运行容器 gpsserver================\'
sudo docker run --name=gpsserver -e JAVA_OPTS=\'  -Dspring.profiles.active=prod \' --restart always -it -d -p 10111:10111 -p 15678:15678  -v /data/public/gpsserver/logs:/logs gpsserver:latest
 
echo "finished!"
exit  ###退出远程机器
remotessh  ###结尾哦
echo \'================结束远程启动================\'

  

 

以上是关于腾讯云的devops自动化部署代替jenkins的主要内容,如果未能解决你的问题,请参考以下文章

Docker环境搭建Jenkins+gitlab+maven自动打包 部署容器

DevOps系列——Jenkins/Gitlab自动打包部署

DevOps系列——Jenkins/Gitlab自动打包部署

势不可挡的猛兽 DevOps!

进军DevOps,Jenkins+GitHub实现自动化部署,一键上传,自动部署!

进军DevOps,Jenkins+GitHub实现自动化部署,一键上传,自动部署!