
"Jenkins X is a CI/CD solution for modern cloud applications on Kubernetes." 这是Jenkins社区对于Jenkins X 的官方总结和定义。显而易见,它是一套以Jenkins作为核心发动机,以GitOps作为方法论,集成了nexus, docker-registry 和chartmuseum 等一系列交付标准存储组件的持续集成和持续交付解决方案。 下面我们讲介绍如何在阿里云容器服务上快速安装Jenkins X。 首先,需要在 阿里云容器服务控制台 创建一个香港集群,如果创建的集群只有一个worker节点,建议添加一台配置不低于8C16G的ECS。 进入集群管理页面,找到 “Master 节点 SSH 连接地址”,SSH登录Master。 安装 git。 yum install git 安装 jx 。 4.1 定制化 env-kubernetes 来实现在阿里云容器服务kubernetes集群上安装jx。创建~/.jx文件目录。然后下载 cloud-environments repo到.jx文件目录。 mkdir -p ~/.jx cd ~/.jx git clone https://github.com/qinyujia/cloud-environments.git 4.2 在ECS上安装jx客户端。 curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.83/jx-linux-amd64.tar.gz | tar xzv sudo mv jx /usr/local/bin 4.3 更新helm stable repo。 helm repo remove stable helm repo add stable https://kubernetes-charts.storage.googleapis.com helm repo list 4.4 在阿里云容器服务kubernetes集群上安装jx server组件。 jx install --provider=kubernetes 在Jenkins系统设置页面关闭证书验证。例如,打开http://jenkins.jx.47.89.0.138.nip.io/configure 页面,选中Disable https certificate check。 接下来就可以查看并使用Jenkins X啦。
本文档以构建一个 Java 软件项目并部署到 阿里云容器服务Serverless Kubernetes集群 为例说明如何使用 CodePipeline。 使用说明 开通使用 CodePipeline 产品。 前往 RAM 进行 CodePipeline 默认角色的授权。 操作步骤 新建项目 单击 新建,输入项目名称,选择 构建一个Java的软件项目 ,单击 下一步。 代码构建配置 本页所有默认配置为CodePipeline为您提供的示例,快速体验可以直接单击 下一步。 Repository 中配置的是仓库地址和证书,默认值是CodePipeline公开的Code仓库地址。 Branches to build 中配置的是代码分支,默认值是master分支。 构建 中配置的是代码构建命令,默认值是mvn package -B -DskipTests。 测试 中配置的是单元测试命令,默认值是mvn test。如果您不需要做单元测试,可以不填写测试命令。 选择部署方式 选择部署方式,单击 部署到Kubernetes。 配置 镜像构建和发布 镜像仓库名称。镜像仓库名格式为namespace/镜像仓库名。 镜像版本号。如果为空,则默认是latest。 Registry地址。Registry地址 用来配置docker registry地址,如果为空,默认使用Docker hub registry ,https://index.docker.io/v1/;如果使用阿里云registry, 请填写https://registry.cn-beijing.aliyuncs.com/v2/,其中地域cn-beijing根据用户实际的镜像仓库地域来修改。 Registry证书。用来添加授权信息,请添加Registry授权类型的证书。 Dockerfile路径。填写Dockerfile文件在该项目工作空间的相对路径。如果该配置为空,则默认使用工作空间目录下命名为Dockerfile的文件。 配置 部署Kubernetes 选择 认证方式。 Serverless Kubernetes集群 均使用 证书认证 方式。 填写 API服务器地址。 请输入 Serverless Kubernetes集群API服务器地址,您可以通过 阿里云容器服务控制台 -> Kubernetes集群列表 -> ${Serverless Kubernetes集群名称} -> 管理,找到 API Server连接端点。例如,c264313085e994df****508afcd25eee6.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443。在该字符串头部添加https:// 作为Codepipeline的API服务器地址。例如,https://c264313085e994df****508afcd25eee6.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443。 添加并使用 Docker授权 类型的证书。 如果是阿里云容器服务Serverless Kubernetes集群,请把控制台提供的 集群凭据 保存到本机 ~/.kube/config。如下图所示内容。 接着在本机执行cat ~/.kube/config |grep client-key-data |awk -F ' ' '{print $2}' | base64 -d > client.key,把client.key文件的内容填入 客户端Key 对话框。 执行cat ~/.kube/config |grep client-certificate-data |awk -F ' ' '{print $2}' | base64 -d > client.crt, 把client.crt文件的内容填入 客户端证书 对话框。 添加 部署配置文件。 输入yaml格式的Kubernetes部署配置文件。如果文件在当前项目的workspace下,请直接输入文件名,如果在项目workspace的子目录中,请输入 ..子目录/文件名。不支持位于当前项目的workspace之外的文件。 添加 状态检查配置。 支持检验的 Kubernetes Kind: pods,deployments。 请用 ":" 分隔 Kubernetes Kind 和 Kind name, 用 "," 分隔多个 Kind name。每一行描述一种 Kubernetes Kind。示例配置: pods:pods1,pods2 deployments:ds1,ds2 注意: 请严格按照说明填写单词,不要删减字母;请勿填写多余的空格或者换行。 Serverless Kubernetes集群只支持default namespace。 更多Serverless Kubernetes集群功能支持请参考 Serverless Kubernetes集群文档。 添加 变量申明配置。 支持系统环境变量,可以通过 ${JENKINS_URL}/env-vars.html/ 查看。 如果使用了多个变量,请用","分隔。 您可以在上文的部署配置文件中使用变量,请以 ${BUILD_NUMBER} 格式严格填写,其他格式插件将忽略。 示例:BUILD_NUMBER,JOB_NAME 单击 下一步。 检查所有配置信息,单击 提交。 参数化构建配置 如果需要在构建过程中使用一些动态变量,请参考 注入环境变量文档。下面我们将具体描述如何使用注入环境变量插件,来配置时间戳作为镜像标签。 首先,在代码根目录下准备一个 env.properties 文件。 添加一个 执行shell脚本 的构建步骤 作为构建步骤的第一步,使用鼠标拖拽到最前面。添加如下脚本: TIME=`date +%Y%m%d%H%M%S` echo TAG=$TIME >> env.properties cat env.properties 添加一个 注入环境变量 的构建步骤 作为构建步骤的第二步,同样使用鼠标拖拽到第二个位置。配置 env.properties 作为变量文件。 修改 镜像构建和发布 构建步骤配置。把 镜像版本号 改成上文中设置的参数$TAG。 修改 部署Kubernetes(新)构建步骤配置。在 变量申明配置 中把BUILD_NUMBER 修改成 TAG。 修改 源代码中 部署配置文件 中的镜像版本号为${TAG}。例如: 执行构建 完成项目的任务配置后,可以单击左侧导航栏中的 立即构建,开始执行配置中的构建及部署命令。 您可以在构建队列及构建历史中查看构建状态。单击 构建序号,进入该次构建具体信息页面。 然后在侧导航中,单击 控制台输出,可以查看该次构建日志。
2017年12月22日 CodePipeline全面支持子账号登录以及权限控制,具体操作请参阅帮助文档 https://help.aliyun.com/document_detail/63612.html 新增 Go 语言构建环境,Go语言版本是 v1.9.2。示例代码相关请参阅 https://code.aliyun.com/CodePipeline/go-demo Nodejs 构建环境Nodejs升级到 v8.9.3, yarn同步升级到 v1.3.2。 2017年12月8日 CodePipeline API和SDK全面上线,支持查看项目列表,执行项目,删除项目等。详细使用说明请阅读帮助文档开发指南部分(https://help.aliyun.com/document_detail/62887.html)。 CodePipeline增加使用Packer创建ECS镜像场景,并提供最佳实践示例引导。 其他体验修复(Github插件修复private repo的权限问题,触发器增加静默期等) 2017年11月1日 代码源支持GitHub公网版和企业版,支撑更多代码源的用户能够使用CodePipeline做代码编译构建及交付到阿里云的场景,支持Java语言的海外构建集群,解决国内在代码Build过程中下载海外依赖的速度问题。 阿里云CodePipeline发布Kubernetes插件能够让用户的应用能够通过CodePipeline自动发布到容器服务的Kubernetes集群中。 Bitbucket集成 支持NodeJS, PHP, Python, Python3海外构建环境 Java构建环境增加sbt, Scala支持 PHP构建环境增加GD库 其他体验修复(Job分页功能等) 2017年8月29日 Python2/3语言构建环境支持(version 2.7.13,version 3.6.2) 阿里云Code集成 git插件支持submodule共用主项目的证书 日志输出优化 修复系统环境变量设置 修复centos7.2/7.3版本salt-client部署后没有开启自动服务问题 2017年8月22日 部署ECS支持检查点和回滚。 部署ECS增加CentOS6.8,alinux17.1支持 增加邮件格式校验,约束邮箱上限个数为10 2017年8月15日 Java构建速度优化 Java项目示例配置添加参数,去除maven构建日志的下载进度信息显示 NodeJs版本升级到6.11.2 部署容器服务应用 构建步骤 增加集群地址校验和证书验证逻辑 镜像构建和发布 构建步骤 修复 ADD 文件路径问题 2017年8月4日 钉钉通知组件 PHP语言构建环境支持 修复wizzard参数传递BUG
最近收到很多有关于持续集成场景中image tag的反馈,例如,每次image build的时候希望“Jenkins”能够给image标上不一样的tag,部署应用到阿里云容器服务希望Aliyun-Container-Service-Deploy插件能够实现不是每次以固定的tag发布。本文在原来的持续集成场景中增加这样的两种能力:根据git SHA和构建时间来给image打tag,支持环境变量和compose模板配合部署应用。 为了简洁起见,本文将上述两种能力在一个持续集成场景中进行运用。整个场景是,在代码中增加环境变量配置文件,代码变更触发自动构建,打包代码,构建镜像(用git SHA和构建时间tag image),推送镜像,使用环境变量文件和compose模板来部署应用到阿里云容器服务。值得说明的是,真实的业务场景都是复杂的,需要大家根据自己的业务需求量体裁衣。 Prerequiste Jenkins插件: Environment Injector Plugin CloudBees Docker Build and Publish plugin Aliyun-Container-Service-Deploy v0.1.2 (暂时未更新到Jenkins社区插件仓库,只能通过下载hpi文件手工安装,(下载地址) 本文使用Java作为示例代码,地址:https://github.com/qinyujia/java-demo-spring-boot.git 源码管理 Repository URL 中填入代码仓库地址 Credentials 中填入对应的账号密码 Branch Specifier (blank for 'any') 中填入代码分支 构建 打包代码 增加构建步骤,选择Execute Shell类型,在对话框中输入下面的脚本。代码根目录下的env.properties用来存储部署应用要用到的所有环境变量,我们的image tag(IMAGE_TAG)也是模板中要替换的变量之一。为了兼容shell环境变量,采用“key=value”保存,每行仅存储一对key/value,不要添加无意义的空格。 set -e mvn package -DskipTests echo the tag you want ... GIT_SHA=`git rev-parse --short HEAD || echo "GitNotFound"` VERSION=0.1 TIME=`date +%Y%m%d%H%M%S` IMAGE_TAG=$VERSION-$GIT_SHA-$TIME echo IMAGE_TAG=$VERSION-$GIT_SHA-$TIME >> env.properties cat env.properties 构建镜像 增加构建步骤,选择Inject environment variables类型,在Properties File Path中输入环境变量文件env.properties。 增加构建步骤,选择Docker Build and Publish类型。 Repository Name 中填写image repo,eg,qinyujia-test/spring-boot-demo。 Tag中填写$IMAGE_TAG,前文shell脚本中写入env.properties文件的image tag。 Docker Host URI和Server credentials缺省则表示使用当前Job执行环境的docker engine。 Docker registry URL中填写https://registry.cn-hangzhou.aliyuncs.com/v2/。 Registry credentials中填写registry的账号密码。 部署应用 增加构建步骤,选择Aliyun Container Service Deploy类型。 ApplicationName对话框中输入应用名称。 ComposeTemplate对话框输入编排模板位置(代码中的相对路径)。 EnvFile中填写环境变量文件env.properties位置(代码中的相对路径)。Publish Strategy对话框中选择需要的发布模式,支持标准发布和蓝绿发布。 Host Credentials中添加“Docker Host Certificate Authentication”类型的证书。 总结 本文的持续集成场景中,image tag包含了三种信息:version,应用版本;git SHA,用来追溯对应的代码变更;time,保存image build的时间,这样每次持续集成产出的artifact都是可以快速定位和归档。 Aliyun-Container-Service-Deploy插件整合了阿里云容器服务部署应用的能力,增加对环境变量的支持。 想查看阿里云容器服务提供了哪些slave节点,请访问 https://github.com/AliyunContainerService/jenkins-slaves想了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice
翻了 http 和 https 对于go get 需要类似 vpn 的机制
或者使用命令行 shuttle 也可以
go 一般博客 2c2g 或者1c2g 就够用
注意使用最新go 版本,gc 比较有优势
提示什么错误。
php 的 docker 镜像可以参考使用这个 https://hub.docker.com/_/php/
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli php your-script.php