GVKun编程网logo

阿里云 Kubernetes 服务上从零搭建 GitLab+Jenkins+GitOps 应用发布模型的实践全纪录

7

以上就是给各位分享阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录,同时本文还将给你拓展.Netcore使用Jenkins+Docker+Az

以上就是给各位分享阿里云 Kubernetes 服务上从零搭建 GitLab+Jenkins+GitOps 应用发布模型的实践全纪录,同时本文还将给你拓展.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)、15 分钟在阿里云 Kubernetes 服务上快速建立 Jenkins X Platform 并运用 GitOps 管理应用发布、15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布、centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

阿里云 Kubernetes 服务上从零搭建 GitLab+Jenkins+GitOps 应用发布模型的实践全纪录

阿里云 Kubernetes 服务上从零搭建 GitLab+Jenkins+GitOps 应用发布模型的实践全纪录

关于 GitOps 的介绍,可以参考 GitOps:Kubernetes 多集群环境下的高效 CICD 实践

1. 在 容器服务控制台 创建 kubernetes 集群

1.1 新建 Kubernetes 集群:

1.2 新建命名空间 gitops

我们将会把 gitlab 和 jenkins 全部部署到此命名空间下

2. 创建 GitLab 应用 (可选项,可以对接已有 GitLab 环境)

容器服务控制台上依次点击 市场 -> 应用目录 -> gitlab-ce :

在 参数 中设置 externalUrl 和 gitlabRootPassword 后选择 gitops 命名空间并创建应用,本次实践中 externalUrl 设置为 http://ls-gitlab.example.com/, 如果没有 dns 解析的话,可以在创建成功后直接使用 ip

容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看 gitlab 应用的访问地址,大约 2 分钟后可访问 gitlab 并登陆:

3. 设置 GitLab 并上传示例源码项目

3.1 新建 private group application

创建 private group application:

3.2 新建并上传 private project application-demo

创建 private project application-demo, 示例源码地址:

https://code.aliyun.com/haoshuwei/application-demo.git

从 master 新建一个分支 latest:

设置 master 和 latest 分支只有管理员才能 merge 和 push 代码的操作:

3.3 新建 private group builds

3.4 新建并上传 private project preview-pipeline staging-pipeline production-pipeline

preview-pipeline 示例源码地址为:

https://code.aliyun.com/haoshuwei/preview-pipeline.git

staging-pipeline 示例源码地址为:

https://code.aliyun.com/haoshuwei/staging-pipeline.git

production-pipeline 示例源码地址为:

https://code.aliyun.com/haoshuwei/production-pipeline.git

上传 3 个构建项目之前需要替换以下字段:
IMAGE_REPO:  应用容器镜像要上传到哪个镜像仓库,镜像仓库地址
dingTalkToken: 钉钉通知所使用的钉钉机器人 accessToken
Fetch Git Repo -> credentialsId : 用于 Jenkins 拉取 git 项目的证书名称,需要在 Jenkins 中创建名为 gitlab 的证书
Fetch Git Repo -> url : Jenkins 拉取 git repo 的 url

preview-pipeline:

staging-pipeline

production-pipeline

3.5 注册一个普通开发者用户 developer

管理员用户登录后将 developer 用户添加为 application 组的 developer member:

此时 developer 用户只有 application 组下 projects 的权限, 没有 builds 组的权限:

3.6 生成一个 apiToken 用于 Jenkins 配置 gitlabConnection

生成并复制保存 apiToken:

4. 创建 Jenkins 应用

容器服务控制台上依次点击 市场 -> 应用目录 -> jenkins:

在 参数 中设置 Master.AdminPassword 的值,并更改 rbac.install 的值为 true,选择 gitops 命名空间后点击创建:

容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看 jenkins 应用的访问地址,大约 1 分钟后可访问 jenkins 并登陆:

5. 配置 Jenkins 并创建构建任务

5.1 配置 gitlabConnection

系统管理 -> 系统设置 -> Gitlab:



 

配置完毕后点击 Save 保存。

5.2 新建构建任务 preview-pipeline

5.2.1 新建任务,输入名称选择流水线类型并点击创建:

5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:

点击 Advanced 进行高级选项配置如图所示:

复制并保存 GitLab webhook URL 和 Secret token 的值用于在 Gitlab 上配置 webhook。

5.2.3 Pipeline 区域配置 preview-pipeline 构建项目的 git repo

完成配置后点击 保存。

5.3 新建构建任务 staging-pipeline

5.3.1 新建任务,输入名称选择流水线类型并点击创建:
image

5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
image
点击 Advanced 进行高级选项配置如图所示:
image

复制并保存 GitLab webhook URL 和 Secret token 的值用于在 Gitlab 上配置 webhook。

5.3.3 Pipeline 区域配置 staging-pipeline 构建项目的 git repo
image
image

完成配置后点击 保存。

5.4 新建构建任务 production-pipeline

5.4.1 新建任务,输入名称选择流水线类型并点击创建:

5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:

点击 Advanced 进行高级选项配置如图所示:

复制并保存 GitLab webhook URL 和 Secret token 的值用于在 Gitlab 上配置 webhook。

5.4.3 Pipeline 区域配置 production-pipeline 构建项目的 git repo

完成配置后点击 保存。

5.5 创建 docker registry auth secret:

$ docker login registry.cn-hangzhou.aliyuncs.com
$ kubectl -n gitops create secret generic jenkins-docker-cfg  --from-file=/root/.docker/config.json

5.6 创建 clusterrolebinding 授予 serviceaccount default 对 gitops 命名空间的管理权限

clusterrolebinding.yaml:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gitops-cluster-admin
subjects:
  - kind: ServiceAccount
    name: default
    namespace: gitops
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
$ kubectl create -f clusterrolebinding.yaml

5.7 设置匿名用户的可读权限

系统管理 -> 全局安全管理 -> Authorization -> 勾选 Allow anonymous read access 并保存:

6. 配置 GitLab webhook

进入 application-demo 项目的 webhook 配置页面:

6.1 配置触发 jenkins job preview-pipeline 的触发器

所图所示:

6.2 配置触发 jenkins job staging-pipeline 的触发器

所图所示:

6.3 配置触发 jenkins job production-pipeline 的触发器

所图所示:

7. GitOps 模型发布应用

7.1 developer 用户做以下操作

7.1.1 在 application-demo 项目上新建一个开发分支 features/change-index-1

7.1.2 修改 src/main/resources/static/index.html 中的 kubernetes.svg 为 jenkins.svg 并提交修改

7.1.3 创建请求合并到 latest 分支的 Merge Request

Open MergeRequest 的动作会触发 jenkins job preview-pipeline 的自动构建,并完成以下 stages:
(1)拉取 http://xxx.xxx.xxx/builds/preview-pipeline.git 项目并按照 Jenkins 定义的内容继续执行以下内容
(2)Fetch Git Repo: 拉取应用源码项目 http://xxx.xxx.xxx.xxx/application/application-demo.git
(3)Maven Build: 打包
(4)Maven Test: 测试
(5)Docker Build And Publish: docker 镜像构建和推送
(6)Kubectl Deploy: 部署应用到 Kubernetes 集群(本示例使用的是本集群的一个动态创建的命名空间 preview-xxx)
(7)Post Actions: 钉钉通知

developer 可以查看 Merge Request 页面的内容

点击可跳转至 jenkins 构建日志:

7.1.4 构建完成后可以看到一个 application-demo 应用的预览页面

点击预览应用:

也可以直接在钉钉群里查看应用访问链接等信息:

7.1.5 应用预览验证后, developer 可以申请管理员接受此合并

7.2 管理员合并指向 latest 分支的 MergeRequest

合并 MR:

Accept MR 的动作或触发 staging-pipeline 的构建,拉取 application-demo 项目的 latest 分支代码并构建和部署到 staging 命名空间下

查看钉钉通知并访问 staging 环境中的 application-demo 应用:

7.3 管理员创建 latest 到 master 分支的 Merge Request 并合并此指向 master 的 Merge Request

Accept MR 的动作或触发 production-pipeline 的构建,拉取 application-demo 项目的 master 分支代码并构建和部署到 production 命名空间下

查看钉钉通知并访问 production 环境中的 application-demo 应用:

原文链接​

本文为云栖社区原创内容,未经允许不得转载。

.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)

.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)

    目前 CI/CD 挺火的,这里使用的 Jenkins + Docker + Azure Devops 部署,或者可以用这套 Jenkins + Docker + Github 或 GitLab 部署,

    进入正题:  第零点:当然要先安装.Net core 运行时,官网上就有下载。

    首先  这里的 jenkins 并不是装在 docker 里面的 jenkins,是直接安装到 linux 上的 jenkins。其实安装在 docker 更加方便,因为这样系统不用安装 JavaSdk,我参考的是晓晨的博客,原文链接:https://www.cnblogs.com/stulzq/p/9291237.html ,这里要强调的是:1、首先我们先要安装 java 环境,参考晓晨的博客,原文链接:https://www.cnblogs.com/stulzq/p/9286878.html 里面非常详细的介绍。 

但是这里要注意的就是:

官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 在官网下载需要点击这个选项才能下载,下载框中的那个就可以了。

 

然后 jenkins 安装晓晨的博客已经说的非常明白了。

接下来就是 Azure Devops 的说明,微软这个东西挺不错的,配合 vs 使用也挺好用的,但是还是比不上 github,

如图:可以建立自己的分支上传(push)和拉取(pull),从某分支合并(merge),完成团队协作。基本上使用非常简单,通过 vs 就可以直接新建项目到 Azure Devops,也可以建立多个分支,达到团队协作的目的,这里就不详细说明啦。

接下来就是 docker 的安装了,这里也是参考晓晨博客,原文地址:http://www.cnblogs.com/stulzq/p/7743073.html,这里要说明的就是我们需要安装 docker-compose ,这样就可以运行 dockerfile 文件脚本,达到自动部署的目的。

好吧,基本上安装完之后,我们就可以开始了:

首先我们需要在 jenkins 上面新建一个任务,自由风格的软件项目: (这里有一部分参考晓晨的博客,原文链接:http://www.cnblogs.com/stulzq/p/8627824.html)

 

 然后点击 ok 进入下一个页面,这里的是丢弃旧的构建,因为太多就占磁盘了,第一个是保留几天的 build 记录,第二个是最多保留多少个构建,设小一点就不会占很多硬盘空间了。

然后就是 git 的地址了:

 

上图的 git 地址, 就是这里的 git clone 地址 (当然 git 地址都行):

还需要注意的就是凭证(再点击右上角你的账户下的 security):

在这里面填入名称密码就可以了,然后在上面的凭证 Credentials 填入就行了:

 

接下来就是 jenkins 拉取代码的时间(这里 H/2 * * * * 是两分钟拉取一次):

然后是拉取后,构建执行的命令:

jenkins 拉取代码后会判断代码与之前的是否不一致,如果不一致,则会执行构建。

接下来是 docker 的说明:可以看到上图的命令,倒数两行,会执行这个脚本文件,这个脚本文件实际上是 docker 的一些命令,所以我们需要在项目目录中添加这个脚本文件,我就是直接添加 TXT 文件改后缀.sh。(有点 low。。。。)

来看看这个脚本里面放什么:

#!/bin/sh
docker container ls -a | grep "tr"
if [ $? -eq 0 ];then
    docker container stop tr
    docker container rm tr
    docker rmi  tr
    docker network ls |grep tr
    docker network rm tr
fi

docker build -t tr --build-arg env="Development" .
docker run -d --restart=always  -p 8051:80 --name tr tr
docker cp /etc/localtime tr:/etc/

可以看到就是如果存在 tr 先停止 删除 然后再构建。当然我们也得有 dockerfile 这个文件,构建的时候 docker 会去找到 dockerfile 然后执行里面的命令(dockerfile 在新建.net core 项目的时候勾选支持 docker 就可以咯,还有直接添加 txt 去掉后缀也行哈哈哈)

然后看看 dockerfile 有什么:

# 基于dotnet基础环境构建镜像
FROM docker.io/microsoft/dotnet

RUN mkdir /TR
#定义参数
ARG env
# 把发布的内容拷贝到docker容器的TR目录下
COPY /publish /TR
# 设置工作目录
WORKDIR /TR
# 暴露80端口
EXPOSE 80
# 设置环境变量
ENV ASPNETCORE_ENVIRONMENT=$env
# 启动web
RUN echo "执行环境: $env"
CMD ["dotnet","TR.dll"]

dockerfile 指令详解说明:https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/,里面都有说明就不多说了,要注意的就是,大致的流程就是首先我们上传代码到 Azure Devops 上,然后 jenkins 根据凭证去 Azure Devops 拉取代码到服务器上,执行命令脚本构建,然后就交给脚本执行,找到 dockfile 执行,重构镜像再生成容器。网站就部署到 docker 里面了。

大致的就是这样,感谢晓晨的博客,给了我非常大的帮助,这就是晓晨的博客地址:https://www.cnblogs.com/stulzq/

15 分钟在阿里云 Kubernetes 服务上快速建立 Jenkins X Platform 并运用 GitOps 管理应用发布

15 分钟在阿里云 Kubernetes 服务上快速建立 Jenkins X Platform 并运用 GitOps 管理应用发布

本文主要介绍如何在阿里云容器服务 Kubernetes 上快速安装部署 Jenkins X Platform 并结合 demo 实践演示 GitOps 的操作流程。

注意:
本文中使用的 jx 工具、cloud-environments 等做过改造用以适配阿里云 Kubernetes 容器服务,并未在自建 Kubernetes 集群中做过验证。

先决条件:
首先,需要在 阿里云容器服务控制台 创建一个 Kubernetes 集群,本次实践使用的环境信息如下:
master1 192.168.0.119
master2 192.168.0.120
master3 192.168.0.121
worker1 192.168.0.122
jx-node 192.168.0.123

一、 部署 Jenkins X Platform 并创建 Staging Production Env

1. kubectl 、helm、git 和 jx 的安装以及初始化

$ scp 192.168.0.119:/usr/bin/kubectl /usr/bin/kubectl
$ scp 192.168.0.119:/usr/local/bin/helm /usr/local/bin/helm
$ mkdir -p $HOME/.kube

将容器服务控制台上显示的 kubeconfig 文件内容复制到计算机 $HOME/.kube/config

初始化 Helm Client:

$ helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
$ helm repo update

安装 git

$ yum install git -y

安装 jx

$ wget http://acs-jenkins-x.oss-cn-beijing.aliyuncs.com/v1.3.699/jx && mv jx /usr/local/bin/ && chmod +x /usr/local/bin/jx

验证 jx:(注意不要选择升级,jx 做了定制化修改,目前版本 1.3.699)

$ jx version
Error loading team settings. the server could not find the requested resource (get environments.jenkins.io)
Error loading team settings. the server could not find the requested resource (get environments.jenkins.io)
Failed to get git version: failed to run ''git version'' command in directory '''', output: '''': exec: "git": executable file not found in $PATH
NAME               VERSION
jx                 1.3.699
Kubernetes cluster v1.11.5
kubectl            v1.11.5
helm client        v2.11.0+g2e55dbe
helm server        v2.11.0+g2e55dbe
Operating System   "CentOS Linux release 7.4.1708 (Core) "

A new jx version is available: 1.3.736
? Would you like to upgrade to the new jx version? No

2. 安装 jenkins-x-platform

$ mkdir -p ~/.jx
$ cd ~/.jx
$ jx install --provider=kubernetes \
             --domain aliyunk8s-bj.com \
             --ingress-deployment=nginx-ingress-controller \
             --ingress-service=nginx-ingress-lb  \
             --cloud-environment-repo=https://github.com/AliyunContainerService/cloud-environments.git \
             --no-tiller=true \
             --no-default-environments=true

交互及日志输出如下:

Namespace jx created
 Using helmBinary helm with feature flag: none
Context "kubernetes-admin-ccf3ebc497d9e4083aab8c89bb1b217bc" modified.
Storing the kubernetes provider kubernetes in the TeamSettings
Enabling helm template mode in the TeamSettings
? Please enter the name you wish to use with git:  jenkins-x-bot
? Please enter the email address you wish to use with git:  haoshuwei24@gmail.com
Git configured for user: jenkins-x-bot and email haoshuwei24@gmail.com
Trying to create ClusterRoleBinding kubernetes-admin-cluster-admin-binding for role: cluster-admin for user kubernetes-admin
 clusterrolebindings.rbac.authorization.k8s.io "kubernetes-admin-cluster-admin-binding" not found
Created ClusterRoleBinding kubernetes-admin-cluster-admin-binding
Using helm2
Skipping tiller
helm installed and configured
existing ingress controller found, no need to install a new one
Waiting for external loadbalancer to be created and update the nginx-ingress-controller service in kube-system namespace
External loadbalancer created
Waiting to find the external host name of the ingress controller Service in namespace kube-system with name nginx-ingress-lb
If you are installing Jenkins X on premise you may want to use the ''--on-premise'' flag or specify the ''--external-ip'' flags. See: https://jenkins-x.io/getting-started/install-on-cluster/#installing-jenkins-x-on-premise
You can now configure your wildcard DNS aliyunk8s-bj.com to point to 39.97.21.40
nginx ingress controller installed and configured
Lets set up a Git user name and API token to be able to perform CI/CD

Creating a local Git user for GitHub server
? GitHub user name: jenkins-x-bot
To be able to create a repository on GitHub we need an API Token
Please click this URL https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo

Then COPY the token and enter in into the form below:

? API Token: ****************************************
Select the CI/CD pipelines Git server and user
? Do you wish to use GitHub as the pipelines Git server: Yes
? Do you wish to use jenkins-x-bot as the pipelines Git user for GitHub server: Yes
Setting the pipelines Git server https://github.com and user name jenkins-x-bot.
Saving the Git authentication configurationCurrent configuration dir: /root/.jx
options.Flags.CloudEnvRepository: https://github.com/AliyunContainerService/cloud-environments.git
options.Flags.LocalCloudEnvironment: false
Cloning the Jenkins X cloud environments repo to /root/.jx/cloud-environments
Enumerating objects: 1317, done.
Counting objects: 100% (1317/1317), done.
Compressing objects: 100% (618/618), done.
Total 1317 (delta 673), reused 1317 (delta 673), pack-reused 0
No default password set, generating a random one
Generated helm values /root/.jx/extraValues.yaml
Creating Secret jx-install-config in namespace jx
Installing Jenkins X platform helm chart from: /root/.jx/cloud-environments/env-kubernetes
? Select Jenkins installation type: Static Master Jenkins
? Pick workload build pack:  Kubernetes Workloads: Automated CI+CD with GitOps Promotion
Setting the team build pack to kubernetes-workloads repo: https://github.com/AliyunContainerService/jenkins-x-kubernetes.git ref: master
Installing jx into namespace jx
Adding values file /root/.jx/cloud-environments/env-kubernetes/myvalues.yaml
Adding values file /root/.jx/adminSecrets.yaml
Adding values file /root/.jx/extraValues.yaml
Adding values file /root/.jx/cloud-environments/env-kubernetes/secrets.yaml
Fetched chart jenkins-x/jenkins-x-platform to dir /tmp/helm-template-workdir-860490114/jenkins-x/chartFiles/jenkins-x-platform
Generating Chart Template ''template --name jenkins-x --namespace jx /tmp/helm-template-workdir-860490114/jenkins-x/chartFiles/jenkins-x-platform --output-dir /tmp/helm-template-workdir-860490114/jenkins-x/output --debug --values /root/.jx/cloud-environments/env-kubernetes/myvalues.yaml --values /root/.jx/adminSecrets.yaml --values /root/.jx/extraValues.yaml --values /root/.jx/cloud-environments/env-kubernetes/secrets.yaml''
Applying generated chart jenkins-x/jenkins-x-platform YAML via kubectl in dir: /tmp/helm-template-workdir-860490114/jenkins-x/output
deployment.extensions/jenkins-x-chartmuseum created
persistentvolumeclaim/jenkins-x-chartmuseum created
secret/jenkins-x-chartmuseum created
service/jenkins-x-chartmuseum created
role.rbac.authorization.k8s.io/cleanup created
rolebinding.rbac.authorization.k8s.io/cleanup created
serviceaccount/cleanup created
clusterrole.rbac.authorization.k8s.io/controllercommitstatus-jx created
clusterrolebinding.rbac.authorization.k8s.io/controllercommitstatus-jx created
deployment.apps/jenkins-x-controllercommitstatus created
role.rbac.authorization.k8s.io/controllercommitstatus created
rolebinding.rbac.authorization.k8s.io/controllercommitstatus created
serviceaccount/jenkins-x-controllercommitstatus created
clusterrole.rbac.authorization.k8s.io/controllerrole-jx created
clusterrolebinding.rbac.authorization.k8s.io/controllerrole-jx created
deployment.apps/jenkins-x-controllerrole created
role.rbac.authorization.k8s.io/controllerrole created
rolebinding.rbac.authorization.k8s.io/controllerrole created
serviceaccount/jenkins-x-controllerrole created
clusterrole.rbac.authorization.k8s.io/controllerteam-jx created
clusterrolebinding.rbac.authorization.k8s.io/controllerteam-jx created
deployment.apps/jenkins-x-controllerteam created
role.rbac.authorization.k8s.io/controllerteam created
rolebinding.rbac.authorization.k8s.io/controllerteam created
serviceaccount/jenkins-x-controllerteam created
clusterrole.rbac.authorization.k8s.io/controllerworkflow-jx created
clusterrolebinding.rbac.authorization.k8s.io/controllerworkflow-jx created
deployment.apps/jenkins-x-controllerworkflow created
role.rbac.authorization.k8s.io/controllerworkflow created
rolebinding.rbac.authorization.k8s.io/controllerworkflow created
serviceaccount/jenkins-x-controllerworkflow created
configmap/exposecontroller created
role.rbac.authorization.k8s.io/expose created
rolebinding.rbac.authorization.k8s.io/expose created
serviceaccount/expose created
clusterrole.rbac.authorization.k8s.io/gcactivities-jx created
clusterrolebinding.rbac.authorization.k8s.io/gcactivities-jx created
cronjob.batch/jenkins-x-gcactivities created
role.rbac.authorization.k8s.io/gcactivities created
rolebinding.rbac.authorization.k8s.io/gcactivities created
serviceaccount/jenkins-x-gcactivities created
cronjob.batch/jenkins-x-gcpods created
role.rbac.authorization.k8s.io/gcpods created
rolebinding.rbac.authorization.k8s.io/gcpods created
serviceaccount/jenkins-x-gcpods created
clusterrole.rbac.authorization.k8s.io/gcpreviews-jx created
clusterrolebinding.rbac.authorization.k8s.io/gcpreviews-jx created
cronjob.batch/jenkins-x-gcpreviews created
role.rbac.authorization.k8s.io/gcpreviews created
rolebinding.rbac.authorization.k8s.io/gcpreviews created
serviceaccount/jenkins-x-gcpreviews created
deployment.extensions/jenkins-x-heapster created
service/heapster created
configmap/jenkins created
persistentvolumeclaim/jenkins created
service/jenkins-agent created
deployment.extensions/jenkins created
service/jenkins created
configmap/jenkins-x-git-kinds created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-jx-role-binding created
secret/jenkins created
serviceaccount/jenkins created
configmap/jenkins-tests created
configmap/nexus created
deployment.extensions/jenkins-x-nexus created
persistentvolumeclaim/jenkins-x-nexus created
secret/nexus created
service/nexus created
role.rbac.authorization.k8s.io/committer created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-x-team-controller created
configmap/jenkins-x-team-controller created
secret/jenkins-docker-cfg created
configmap/jenkins-x-devpod-config created
configmap/jenkins-x-docker-registry created
configmap/jenkins-x-extensions created
configmap/jenkins-x-pod-templates created
secret/jx-basic-auth created
role.rbac.authorization.k8s.io/jx-view created
secret/jenkins-maven-settings created
secret/jenkins-npm-token created
role.rbac.authorization.k8s.io/owner created
secret/jenkins-release-gpg created
secret/jenkins-ssh-config created
role.rbac.authorization.k8s.io/viewer created
Applying Helm hook post-upgrade YAML via kubectl in file: /tmp/helm-template-workdir-860490114/jenkins-x/helmHooks/jenkins-x-platform/charts/expose/templates/job.yaml
job.batch/expose created
Waiting for helm post-upgrade hook Job expose to complete before removing it

如果是首次部署 jenkins x platfrom 的话,此处需等待几分钟进行镜像的拉取和容器的启动:

$ kubectl -n jx get po
NAME                                                READY     STATUS              RESTARTS   AGE
expose-2bhmv                                        0/1       ContainerCreating   0          1m
jenkins-568884c766-sxc7d                            0/1       Init:0/1            0          1m
jenkins-x-chartmuseum-6cf566bfb-jm7cv               0/1       ContainerCreating   0          1m
jenkins-x-controllercommitstatus-6f57d857d8-kzllt   1/1       Running             0          1m
jenkins-x-controllerrole-57d864c96f-4lrrk           1/1       Running             0          1m
jenkins-x-controllerteam-c48fc44f-tsrkh             0/1       ContainerCreating   0          1m
jenkins-x-controllerworkflow-c758649d6-2kpfj        0/1       ContainerCreating   0          1m
jenkins-x-heapster-7fbdb867d9-wt6sl                 0/2       ContainerCreating   0          1m
jenkins-x-nexus-5d5455cfd7-4xsck                    0/1       ContainerCreating   0          1m

接下来的日志交互及输出如下:

^@^@^@Deleting helm hook sources from file: /tmp/helm-template-workdir-860490114/jenkins-x/helmHooks/jenkins-x-platform/charts/expose/templates/job.yaml
job.batch "expose" deleted
Removing Kubernetes resources from older releases using selector: jenkins.io/chart-release=jenkins-x,jenkins.io/version!=0.0.3193
waiting for install to be ready, if this is the first time then it will take a while to download images
^@Jenkins X deployments ready in namespace jx


    ********************************************************

         NOTE: Your admin password is: qub6n#mKkh0oN!S59nPp

    ********************************************************


Getting Jenkins API Token
Using url http://jenkins.jx.aliyunk8s-bj.com/me/configure
Unable to automatically find API token with chromedp using URL http://jenkins.jx.aliyunk8s-bj.com/me/configure
Error: creating the chrome client: fork/exec /usr/bin/google-chrome: no such file or directory
Please go to http://jenkins.jx.aliyunk8s-bj.com/me/configure and click Show API Token to get your API Token
Then COPY the token and enter in into the form below:

? API Token:

此处如果没有 DNS service 解析域名 jenkins.jx.aliyunk8s-bj.com 的话, 需要先在 jx-node 上手动绑定 hosts:

$ kubectl -n jx get ing
NAME          HOSTS                             ADDRESS       PORTS     AGE
chartmuseum   chartmuseum.jx.aliyunk8s-bj.com   xx.xx.xx.xx   80        5m
jenkins       jenkins.jx.aliyunk8s-bj.com       xx.xx.xx.xx   80        5m
nexus         nexus.jx.aliyunk8s-bj.com         xx.xx.xx.xx   80        5m
$ echo "xx.xx.xx.xx jenkins.jx.aliyunk8s-bj.com" >> /etc/hosts

根据日志提示生成 jenkins api token:
image
完成安装:

Created user admin API Token for Jenkins server jenkins.jx.aliyunk8s-bj.com at http://jenkins.jx.aliyunk8s-bj.com
Updating Jenkins with new external URL details http://jenkins.jx.aliyunk8s-bj.com

Jenkins X installation completed successfully


    ********************************************************

         NOTE: Your admin password is: qub6n#mKkh0oN!S59nPp

    ********************************************************



Your Kubernetes context is now set to the namespace: jx
To switch back to your original namespace use: jx namespace default
For help on switching contexts see: https://jenkins-x.io/developing/kube-context/

To import existing projects into Jenkins:       jx import
To create a new Spring Boot microservice:       jx create spring -d web -d actuator
To create a new microservice from a quickstart: jx create quickstart

3. 创建 staging env

$ jx create env -n staging -l Staging --namespace staging --fork-git-repo=''https://github.com/haoshuwei/default-environment-charts.git'' --domain=aliyunk8s-bj.com --promotion=Auto --prefix=''bj''

....
Creating GitHub webhook for haoshuwei/environment-bj-staging for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

由于我们默认使用 Ingress 暴露服务, 所以需要修改 environment-bj-staging 的 webhook:

$ kubectl -n jx get svc |grep LoadBalancer
kubectl -n jx get svc |grep LoadBalancer
jenkins                 LoadBalancer   172.19.11.179   xx.xx.xx.xx   8080:30456/TCP   13h

image

jenkins 会自动创建 environment-bj-staging job 并进行扫描和构建:
image

4. 创建 production env:

$ jx create env -n production -l Production --namespace production --fork-git-repo=''https://github.com/haoshuwei/default-environment-charts.git'' --domain=aliyunk8s-bj.com --promotion=Manual --prefix=''bj''

...
Creating GitHub webhook for haoshuwei/environment-bj-production for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

修改 environment-hz-production 的 webhook。

jenkins 会自动创建 environment-bj-production job 并进行扫描和构建:
image

5. 配置访问阿里云容器镜像服务的 docker registry secret:

$ kubectl -n jx delete secrets jenkins-docker-cfg
secret "jenkins-docker-cfg" deleted
$ docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com
$ kubectl create secret generic jenkins-docker-cfg -n jx --from-file=/root/.docker/config.json
secret/jenkins-docker-cfg created

二、 运用 GitOps 管理应用发布

1. 安装 openjdk

$ yum install -y java-1.8.0-openjdk

2. 创建一个 Spring 示例应用

$ jx create spring -d web -d actuator
? Language: java
? Group: com.example
? Artifact: jenkins-x-demo
Created Spring Boot project at /root/.jx/jenkins-x-demo
No username defined for the current Git server!
? Do you wish to use jenkins-x-bot as the Git user name: Yes
The directory /root/.jx/jenkins-x-demo is not yet using git
? Would you like to initialise git now? Yes
? Commit message:  Initial import

Git repository created
selected pack: /root/.jx/draft/packs/github.com/AliyunContainerService/jenkins-x-kubernetes/packs/maven
? Which organisation do you want to use? jenkins-x-bot
replacing placeholders in directory /root/.jx/jenkins-x-demo
app name: jenkins-x-demo, git server: github.com, org: jenkins-x-bot, Docker registry org: jenkins-x-bot
skipping directory "/root/.jx/jenkins-x-demo/.git"
Using Git provider GitHub at https://github.com


About to create repository jenkins-x-demo on server https://github.com with user jenkins-x-bot
? Enter the new repository name:  jenkins-x-demo


Creating repository jenkins-x-bot/jenkins-x-demo
Pushed Git repository to https://github.com/haoshuwei/jenkins-x-demo

Created Jenkins Project: http://jenkins.jx.aliyunk8s-bj.com/job/haoshuwei/job/jenkins-x-demo/

Watch pipeline activity via:    jx get activity -f jenkins-x-demo -w
Browse the pipeline log via:    jx get build logs haoshuwei/jenkins-x-demo/master
Open the Jenkins console via    jx console
You can list the pipelines via: jx get pipelines
When the pipeline is complete:  jx get applications

For more help on available commands see: https://jenkins-x.io/developing/browsing/

Note that your first pipeline may take a few minutes to start while the necessary images get downloaded!

Creating GitHub webhook for haoshuwei/jenkins-x-demo for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

修改 jenkins-x-demo 的 webhook。

jenkins-x-demo 项目成功创建后,jenkins job jenkins-x-demo 会自动扫描并构建 jenkins-x-demo-0.0.1.tgz 发布到 chartmuseum 并自动 promote 到 staging 环境:
image
查看 environment-bj-staging 项目的 PR:
image
PR 的 Check 通过后会自动 merge:
image
主要修改内容为:
image
然后 environment-bj-staging 项目自动构建并部署 jenkins-x-demo 应用到 Staging Env。

3. 访问 Staging 环境中的 jenkins-x-demo 应用服务

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                            STAGING PODS URL
jx-jenkins-x-demo 0.0.1      1/1  http://jenkins-x-demo.staging.aliyunk8s-bj.com

访问 http://jenkins-x-demo.staging.aliyunk8s-bj.com:
image

4. 开发 jenkins-x-demo 应用并发布新版本到 Staging 环境

步骤 3 中, 我们访问了一个并没有准备好进入生产环境的 jenkins-x-demo 应用, 下面我们添加一个新的 feature:

$ cd jenkins-x-demo
$ git checkout -b feature/add-index

新建 src/main/resources/static/index.html 并写入如下内容:

<html>
  <head>
    <title> Jenkins X Spring Demo </title>
  </head>
  <body bgcolor=white>

    <table border="0" cellpadding="10">
      <tr>
        <td>
          <img height="300" width="300" src="https://github.com/jenkins-x/jenkins-x-website/raw/e5aae999166a67d6220aa469eed1f23e0996c1f7/images/logo.png">
        </td>
        <td>
          <h1>Jenkins X Spring Demo</h1>
        </td>
      </tr>
    </table>
  </body>

</html>

提交和推送后我们在 GitHub 上创建一个 feature/add-index 到 master 分支的 PR:
image
jenkins 会自动对 PR 进行构建和部署,这个过程中 jenkins-x-demo 的部署并不是部署到 Staging 环境,而是会部署为 Preview 环境提供预览:
image
image
预览 jenkins-x-demo 应用 http://jenkins-x-demo.jx-haoshuwei-jenkins-x-demo-pr-1.aliyunk8s-bj.com/:
image

5. 发布新版本 jenkins-x-demo 应用到 Staging 环境

确认提交的 PR 没问题后,即可 merge 到 master 分支:
image

jenkins 会重新构建 jenkins-x-demo v0.0.2 并发布到 Staging 环境:

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                            STAGING PODS URL
jx-jenkins-x-demo 0.0.2      1/1  http://jenkins-x-demo.staging.aliyunk8s-bj.com

6. jenkins-x-demo 应用推送到 Production 环境

一旦应用通过测试验证并准备好进入生产后, 我们就可以手动发布应用到 Production 环境:

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                               STAGING PODS URL
jx-jenkins-x-demo 0.0.2      1/1  http://jenkins-x-demo.production.aliyunk8s-bj.com 0.0.2   1/1  http://jenkins-x-demo.staging.aliyunk8s-bj.com

访问 Production 环境中的 jenkins-x-demo:
image

三、 Production 环境中应用的回滚

回滚到版本 v0.x.x

$ jx promote --version 0.x.x --env production --timeout 20m

四、 删除或重装 Jenkins X Platform

$ kubectl config current-context
$ jx uninstall
$ cd ~/.jx 
$ rm -rf *

五、 结束语

目前 Jenkins X Platform 还在不断完善和改进中, 比如支持多集群等问题 https://github.com/jenkins-x/jx/issues/479, 我们也会持续优化 Jenkins X 在阿里云 Kubernetes 容器服务上的最佳实践并更新博客。

15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程。

注意:
本文中使用的jx工具、cloud-environments等做过改造用以适配阿里云Kubernetes容器服务,并未在自建Kubernetes集群中做过验证。

先决条件:
首先,需要在 阿里云容器服务控制台 创建一个Kubernetes集群,本次实践使用的环境信息如下:
master1 192.168.0.119
master2 192.168.0.120
master3 192.168.0.121
worker1 192.168.0.122
jx-node 192.168.0.123

一、 部署Jenkins X Platform并创建Staging Production Env

1. kubectl 、helm、git和jx的安装以及初始化

$ scp 192.168.0.119:/usr/bin/kubectl /usr/bin/kubectl
$ scp 192.168.0.119:/usr/local/bin/helm /usr/local/bin/helm $ mkdir -p $HOME/.kube

将容器服务控制台上显示的kubeconfig文件内容复制到计算机 $HOME/.kube/config

初始化Helm Client:

$ helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
$ helm repo update

安装git

$ yum install git -y

安装jx

$ wget http://acs-jenkins-x.oss-cn-beijing.aliyuncs.com/v1.3.699/jx && mv jx /usr/local/bin/ && chmod +x /usr/local/bin/jx

验证jx:(注意不要选择升级,jx做了定制化修改,目前版本1.3.699)

$ jx version
Error loading team settings. the server could not find the requested resource (get environments.jenkins.io)
Error loading team settings. the server could not find the requested resource (get environments.jenkins.io)
Failed to get git version: failed to run ''git version'' command in directory '''', output: '''': exec: "git": executable file not found in $PATH NAME VERSION jx 1.3.699 Kubernetes cluster v1.11.5 kubectl v1.11.5 helm client v2.11.0+g2e55dbe helm server v2.11.0+g2e55dbe Operating System "CentOS Linux release 7.4.1708 (Core) " A new jx version is available: 1.3.736 ? Would you like to upgrade to the new jx version? No

2. 安装jenkins-x-platform

$ mkdir -p ~/.jx
$ cd ~/.jx
$ jx install --provider=kubernetes \
             --domain aliyunk8s-bj.com \
             --ingress-deployment=nginx-ingress-controller \
             --ingress-service=nginx-ingress-lb \ --cloud-environment-repo=https://github.com/AliyunContainerService/cloud-environments.git \ --no-tiller=true \ --no-default-environments=true

交互及日志输出如下:

Namespace jx created
 Using helmBinary helm with feature flag: none
Context "kubernetes-admin-ccf3ebc497d9e4083aab8c89bb1b217bc" modified.
Storing the kubernetes provider kubernetes in the TeamSettings
Enabling helm template mode in the TeamSettings
? Please enter the name you wish to use with git:  jenkins-x-bot
? Please enter the email address you wish to use with git: haoshuwei24@gmail.com Git configured for user: jenkins-x-bot and email haoshuwei24@gmail.com Trying to create ClusterRoleBinding kubernetes-admin-cluster-admin-binding for role: cluster-admin for user kubernetes-admin clusterrolebindings.rbac.authorization.k8s.io "kubernetes-admin-cluster-admin-binding" not found Created ClusterRoleBinding kubernetes-admin-cluster-admin-binding Using helm2 Skipping tiller helm installed and configured existing ingress controller found, no need to install a new one Waiting for external loadbalancer to be created and update the nginx-ingress-controller service in kube-system namespace External loadbalancer created Waiting to find the external host name of the ingress controller Service in namespace kube-system with name nginx-ingress-lb If you are installing Jenkins X on premise you may want to use the ''--on-premise'' flag or specify the ''--external-ip'' flags. See: https://jenkins-x.io/getting-started/install-on-cluster/#installing-jenkins-x-on-premise You can now configure your wildcard DNS aliyunk8s-bj.com to point to 39.97.21.40 nginx ingress controller installed and configured Lets set up a Git user name and API token to be able to perform CI/CD Creating a local Git user for GitHub server ? GitHub user name: jenkins-x-bot To be able to create a repository on GitHub we need an API Token Please click this URL https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo Then COPY the token and enter in into the form below: ? API Token: **************************************** Select the CI/CD pipelines Git server and user ? Do you wish to use GitHub as the pipelines Git server: Yes ? Do you wish to use jenkins-x-bot as the pipelines Git user for GitHub server: Yes Setting the pipelines Git server https://github.com and user name jenkins-x-bot. Saving the Git authentication configurationCurrent configuration dir: /root/.jx options.Flags.CloudEnvRepository: https://github.com/AliyunContainerService/cloud-environments.git options.Flags.LocalCloudEnvironment: false Cloning the Jenkins X cloud environments repo to /root/.jx/cloud-environments Enumerating objects: 1317, done. Counting objects: 100% (1317/1317), done. Compressing objects: 100% (618/618), done. Total 1317 (delta 673), reused 1317 (delta 673), pack-reused 0 No default password set, generating a random one Generated helm values /root/.jx/extraValues.yaml Creating Secret jx-install-config in namespace jx Installing Jenkins X platform helm chart from: /root/.jx/cloud-environments/env-kubernetes ? Select Jenkins installation type: Static Master Jenkins ? Pick workload build pack: Kubernetes Workloads: Automated CI+CD with GitOps Promotion Setting the team build pack to kubernetes-workloads repo: https://github.com/AliyunContainerService/jenkins-x-kubernetes.git ref: master Installing jx into namespace jx Adding values file /root/.jx/cloud-environments/env-kubernetes/myvalues.yaml Adding values file /root/.jx/adminSecrets.yaml Adding values file /root/.jx/extraValues.yaml Adding values file /root/.jx/cloud-environments/env-kubernetes/secrets.yaml Fetched chart jenkins-x/jenkins-x-platform to dir /tmp/helm-template-workdir-860490114/jenkins-x/chartFiles/jenkins-x-platform Generating Chart Template ''template --name jenkins-x --namespace jx /tmp/helm-template-workdir-860490114/jenkins-x/chartFiles/jenkins-x-platform --output-dir /tmp/helm-template-workdir-860490114/jenkins-x/output --debug --values /root/.jx/cloud-environments/env-kubernetes/myvalues.yaml --values /root/.jx/adminSecrets.yaml --values /root/.jx/extraValues.yaml --values /root/.jx/cloud-environments/env-kubernetes/secrets.yaml'' Applying generated chart jenkins-x/jenkins-x-platform YAML via kubectl in dir: /tmp/helm-template-workdir-860490114/jenkins-x/output deployment.extensions/jenkins-x-chartmuseum created persistentvolumeclaim/jenkins-x-chartmuseum created secret/jenkins-x-chartmuseum created service/jenkins-x-chartmuseum created role.rbac.authorization.k8s.io/cleanup created rolebinding.rbac.authorization.k8s.io/cleanup created serviceaccount/cleanup created clusterrole.rbac.authorization.k8s.io/controllercommitstatus-jx created clusterrolebinding.rbac.authorization.k8s.io/controllercommitstatus-jx created deployment.apps/jenkins-x-controllercommitstatus created role.rbac.authorization.k8s.io/controllercommitstatus created rolebinding.rbac.authorization.k8s.io/controllercommitstatus created serviceaccount/jenkins-x-controllercommitstatus created clusterrole.rbac.authorization.k8s.io/controllerrole-jx created clusterrolebinding.rbac.authorization.k8s.io/controllerrole-jx created deployment.apps/jenkins-x-controllerrole created role.rbac.authorization.k8s.io/controllerrole created rolebinding.rbac.authorization.k8s.io/controllerrole created serviceaccount/jenkins-x-controllerrole created clusterrole.rbac.authorization.k8s.io/controllerteam-jx created clusterrolebinding.rbac.authorization.k8s.io/controllerteam-jx created deployment.apps/jenkins-x-controllerteam created role.rbac.authorization.k8s.io/controllerteam created rolebinding.rbac.authorization.k8s.io/controllerteam created serviceaccount/jenkins-x-controllerteam created clusterrole.rbac.authorization.k8s.io/controllerworkflow-jx created clusterrolebinding.rbac.authorization.k8s.io/controllerworkflow-jx created deployment.apps/jenkins-x-controllerworkflow created role.rbac.authorization.k8s.io/controllerworkflow created rolebinding.rbac.authorization.k8s.io/controllerworkflow created serviceaccount/jenkins-x-controllerworkflow created configmap/exposecontroller created role.rbac.authorization.k8s.io/expose created rolebinding.rbac.authorization.k8s.io/expose created serviceaccount/expose created clusterrole.rbac.authorization.k8s.io/gcactivities-jx created clusterrolebinding.rbac.authorization.k8s.io/gcactivities-jx created cronjob.batch/jenkins-x-gcactivities created role.rbac.authorization.k8s.io/gcactivities created rolebinding.rbac.authorization.k8s.io/gcactivities created serviceaccount/jenkins-x-gcactivities created cronjob.batch/jenkins-x-gcpods created role.rbac.authorization.k8s.io/gcpods created rolebinding.rbac.authorization.k8s.io/gcpods created serviceaccount/jenkins-x-gcpods created clusterrole.rbac.authorization.k8s.io/gcpreviews-jx created clusterrolebinding.rbac.authorization.k8s.io/gcpreviews-jx created cronjob.batch/jenkins-x-gcpreviews created role.rbac.authorization.k8s.io/gcpreviews created rolebinding.rbac.authorization.k8s.io/gcpreviews created serviceaccount/jenkins-x-gcpreviews created deployment.extensions/jenkins-x-heapster created service/heapster created configmap/jenkins created persistentvolumeclaim/jenkins created service/jenkins-agent created deployment.extensions/jenkins created service/jenkins created configmap/jenkins-x-git-kinds created clusterrolebinding.rbac.authorization.k8s.io/jenkins-jx-role-binding created secret/jenkins created serviceaccount/jenkins created configmap/jenkins-tests created configmap/nexus created deployment.extensions/jenkins-x-nexus created persistentvolumeclaim/jenkins-x-nexus created secret/nexus created service/nexus created role.rbac.authorization.k8s.io/committer created clusterrolebinding.rbac.authorization.k8s.io/jenkins-x-team-controller created configmap/jenkins-x-team-controller created secret/jenkins-docker-cfg created configmap/jenkins-x-devpod-config created configmap/jenkins-x-docker-registry created configmap/jenkins-x-extensions created configmap/jenkins-x-pod-templates created secret/jx-basic-auth created role.rbac.authorization.k8s.io/jx-view created secret/jenkins-maven-settings created secret/jenkins-npm-token created role.rbac.authorization.k8s.io/owner created secret/jenkins-release-gpg created secret/jenkins-ssh-config created role.rbac.authorization.k8s.io/viewer created Applying Helm hook post-upgrade YAML via kubectl in file: /tmp/helm-template-workdir-860490114/jenkins-x/helmHooks/jenkins-x-platform/charts/expose/templates/job.yaml job.batch/expose created Waiting for helm post-upgrade hook Job expose to complete before removing it

如果是首次部署jenkins x platfrom的话,此处需等待几分钟进行镜像的拉取和容器的启动:

$ kubectl -n jx get po
NAME                                                READY     STATUS              RESTARTS   AGE
expose-2bhmv                                        0/1       ContainerCreating   0          1m
jenkins-568884c766-sxc7d                            0/1       Init:0/1            0          1m
jenkins-x-chartmuseum-6cf566bfb-jm7cv               0/1       ContainerCreating   0          1m
jenkins-x-controllercommitstatus-6f57d857d8-kzllt   1/1       Running             0          1m
jenkins-x-controllerrole-57d864c96f-4lrrk           1/1       Running             0          1m
jenkins-x-controllerteam-c48fc44f-tsrkh             0/1       ContainerCreating   0          1m
jenkins-x-controllerworkflow-c758649d6-2kpfj        0/1       ContainerCreating   0          1m
jenkins-x-heapster-7fbdb867d9-wt6sl                 0/2       ContainerCreating   0          1m
jenkins-x-nexus-5d5455cfd7-4xsck                    0/1       ContainerCreating   0          1m

接下来的日志交互及输出如下:

^@^@^@Deleting helm hook sources from file: /tmp/helm-template-workdir-860490114/jenkins-x/helmHooks/jenkins-x-platform/charts/expose/templates/job.yaml
job.batch "expose" deleted
Removing Kubernetes resources from older releases using selector: jenkins.io/chart-release=jenkins-x,jenkins.io/version!=0.0.3193
waiting for install to be ready, if this is the first time then it will take a while to download images ^@Jenkins X deployments ready in namespace jx ******************************************************** NOTE: Your admin password is: qub6n#mKkh0oN!S59nPp ******************************************************** Getting Jenkins API Token Using url http://jenkins.jx.aliyunk8s-bj.com/me/configure Unable to automatically find API token with chromedp using URL http://jenkins.jx.aliyunk8s-bj.com/me/configure Error: creating the chrome client: fork/exec /usr/bin/google-chrome: no such file or directory Please go to http://jenkins.jx.aliyunk8s-bj.com/me/configure and click Show API Token to get your API Token Then COPY the token and enter in into the form below: ? API Token:

此处如果没有DNS service解析域名jenkins.jx.aliyunk8s-bj.com的话, 需要先在jx-node上手动绑定hosts:

$ kubectl -n jx get ing
NAME          HOSTS                             ADDRESS       PORTS     AGE
chartmuseum   chartmuseum.jx.aliyunk8s-bj.com   xx.xx.xx.xx   80        5m
jenkins       jenkins.jx.aliyunk8s-bj.com       xx.xx.xx.xx   80        5m
nexus         nexus.jx.aliyunk8s-bj.com         xx.xx.xx.xx   80 5m $ echo "xx.xx.xx.xx jenkins.jx.aliyunk8s-bj.com" >> /etc/hosts

根据日志提示生成jenkins api token:
image
完成安装:

Created user admin API Token for Jenkins server jenkins.jx.aliyunk8s-bj.com at http://jenkins.jx.aliyunk8s-bj.com
Updating Jenkins with new external URL details http://jenkins.jx.aliyunk8s-bj.com

Jenkins X installation completed successfully


    ********************************************************

         NOTE: Your admin password is: qub6n#mKkh0oN!S59nPp

    ********************************************************



Your Kubernetes context is now set to the namespace: jx To switch back to your original namespace use: jx namespace default For help on switching contexts see: https://jenkins-x.io/developing/kube-context/ To import existing projects into Jenkins: jx import To create a new Spring Boot microservice: jx create spring -d web -d actuator To create a new microservice from a quickstart: jx create quickstart

3. 创建staging env

$ jx create env -n staging -l Staging --namespace staging --fork-git-repo=''https://github.com/haoshuwei/default-environment-charts.git'' --domain=aliyunk8s-bj.com --promotion=Auto --prefix=''bj''

....
Creating GitHub webhook for haoshuwei/environment-bj-staging for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

由于我们默认使用Ingress暴露服务, 所以需要修改environment-bj-staging的webhook:

$ kubectl -n jx get svc |grep LoadBalancer
kubectl -n jx get svc |grep LoadBalancer
jenkins                 LoadBalancer   172.19.11.179 xx.xx.xx.xx 8080:30456/TCP 13h

image

jenkins会自动创建environment-bj-staging job并进行扫描和构建:
image

4. 创建production env:

$ jx create env -n production -l Production --namespace production --fork-git-repo=''https://github.com/haoshuwei/default-environment-charts.git'' --domain=aliyunk8s-bj.com --promotion=Manual --prefix=''bj''

...
Creating GitHub webhook for haoshuwei/environment-bj-production for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

修改environment-hz-production的webhook。

jenkins会自动创建environment-bj-production job并进行扫描和构建:
image

5. 配置访问阿里云容器镜像服务的docker registry secret:

$ kubectl -n jx delete secrets jenkins-docker-cfg
secret "jenkins-docker-cfg" deleted
$ docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com
$ kubectl create secret generic jenkins-docker-cfg -n jx --from-file=/root/.docker/config.json
secret/jenkins-docker-cfg created

二、 运用GitOps管理应用发布

1. 安装openjdk

$ yum install -y java-1.8.0-openjdk

2. 创建一个Spring示例应用

$ jx create spring -d web -d actuator
? Language: java
? Group: com.example
? Artifact: jenkins-x-demo
Created Spring Boot project at /root/.jx/jenkins-x-demo No username defined for the current Git server! ? Do you wish to use jenkins-x-bot as the Git user name: Yes The directory /root/.jx/jenkins-x-demo is not yet using git ? Would you like to initialise git now? Yes ? Commit message: Initial import Git repository created selected pack: /root/.jx/draft/packs/github.com/AliyunContainerService/jenkins-x-kubernetes/packs/maven ? Which organisation do you want to use? jenkins-x-bot replacing placeholders in directory /root/.jx/jenkins-x-demo app name: jenkins-x-demo, git server: github.com, org: jenkins-x-bot, Docker registry org: jenkins-x-bot skipping directory "/root/.jx/jenkins-x-demo/.git" Using Git provider GitHub at https://github.com About to create repository jenkins-x-demo on server https://github.com with user jenkins-x-bot ? Enter the new repository name: jenkins-x-demo Creating repository jenkins-x-bot/jenkins-x-demo Pushed Git repository to https://github.com/haoshuwei/jenkins-x-demo Created Jenkins Project: http://jenkins.jx.aliyunk8s-bj.com/job/haoshuwei/job/jenkins-x-demo/ Watch pipeline activity via: jx get activity -f jenkins-x-demo -w Browse the pipeline log via: jx get build logs haoshuwei/jenkins-x-demo/master Open the Jenkins console via jx console You can list the pipelines via: jx get pipelines When the pipeline is complete: jx get applications For more help on available commands see: https://jenkins-x.io/developing/browsing/ Note that your first pipeline may take a few minutes to start while the necessary images get downloaded! Creating GitHub webhook for haoshuwei/jenkins-x-demo for url http://jenkins.jx.aliyunk8s-bj.com/github-webhook/

修改 jenkins-x-demo的webhook。

jenkins-x-demo项目成功创建后,jenkins job jenkins-x-demo会自动扫描并构建jenkins-x-demo-0.0.1.tgz发布到chartmuseum并自动promote到staging环境:
image
查看environment-bj-staging项目的PR:
image
PR的Check通过后会自动merge:
image
主要修改内容为:
image
然后environment-bj-staging项目自动构建并部署jenkins-x-demo应用到Staging Env。

3. 访问Staging环境中的jenkins-x-demo应用服务

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                            STAGING PODS URL
jx-jenkins-x-demo 0.0.1      1/1 http://jenkins-x-demo.staging.aliyunk8s-bj.com

访问http://jenkins-x-demo.staging.aliyunk8s-bj.com:
image

4. 开发jenkins-x-demo应用并发布新版本到Staging环境

步骤3中, 我们访问了一个并没有准备好进入生产环境的jenkins-x-demo应用, 下面我们添加一个新的feature:

$ cd jenkins-x-demo
$ git checkout -b feature/add-index

新建src/main/resources/static/index.html并写入如下内容:

<html>
  <head>
    <title> Jenkins X Spring Demo </title> </head> <body bgcolor=white> <table border="0" cellpadding="10"> <tr> <td> <img height="300" width="300" src="https://github.com/jenkins-x/jenkins-x-website/raw/e5aae999166a67d6220aa469eed1f23e0996c1f7/images/logo.png"> </td> <td> <h1>Jenkins X Spring Demo</h1> </td> </tr> </table> </body> </html>

提交和推送后我们在GitHub上创建一个feature/add-index到master分支的PR:
image
jenkins会自动对PR进行构建和部署,这个过程中jenkins-x-demo的部署并不是部署到Staging环境,而是会部署为Preview环境提供预览:
image
image
预览jenkins-x-demo应用http://jenkins-x-demo.jx-haoshuwei-jenkins-x-demo-pr-1.aliyunk8s-bj.com/:
image

5. 发布新版本jenkins-x-demo应用到Staging环境

确认提交的PR没问题后,即可merge到master分支:
image

jenkins会重新构建jenkins-x-demo v0.0.2并发布到Staging环境:

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                            STAGING PODS URL
jx-jenkins-x-demo 0.0.2      1/1 http://jenkins-x-demo.staging.aliyunk8s-bj.com

6. jenkins-x-demo应用推送到Production环境

一旦应用通过测试验证并准备好进入生产后, 我们就可以手动发布应用到Production环境:

$ jx get apps
APPLICATION       PRODUCTION PODS URL                                               STAGING PODS URL
jx-jenkins-x-demo 0.0.2      1/1 http://jenkins-x-demo.production.aliyunk8s-bj.com 0.0.2 1/1 http://jenkins-x-demo.staging.aliyunk8s-bj.com

访问Production环境中的jenkins-x-demo:
image

三、 Production环境中应用的回滚

回滚到版本v0.x.x

$ jx promote --version 0.x.x --env production --timeout 20m

四、 删除或重装Jenkins X Platform

$ kubectl config current-context
$ jx uninstall
$ cd ~/.jx 
$ rm -rf *

五、 结束语

目前Jenkins X Platform还在不断完善和改进中, 比如支持多集群等问题https://github.com/jenkins-x/jx/issues/479, 我们也会持续优化Jenkins X 在阿里云Kubernetes容器服务上的最佳实践并更新博客。

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

这篇文章主要为大家详细介绍了centos下搭建GitLab+Jenkins持续集成环境,安装jenkins的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

centos下搭建GitLab+Jenkins持续集成环境,供大家参考,具体内容如下

1、安装JDK

yum install -y java

2、安装jenkins

添加Jenkins库到yum库,Jenkins将从这里下载安装。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key yum install -y jenkins

如果不能安装就到官网下载jenkis的rmp包,官网地址

wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm rpm -ivh jenkins-2.7.3-1.1.noarch.rpm

配置jenkis的端口

vi /etc/sysconfig/jenkins

找到修改端口号:

JENKINS_PORT="8080"  此端口不冲突可以不修改

3、启动jenkins

service jenkins start/stop/restart

安装成功后Jenkins将作为一个守护进程随系统启动

系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者

启动的时候将从/etc/sysconfig/jenkins获取配置参数

默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置

Jenkins的RPM仓库配置被加到/etc/yum.repos.d/jenkins.repo

4、打开jenkins

在浏览器中访问

首次进入会要求输入初始密码如下图,

初始密码在:/var/lib/jenkins/secrets/initialAdminPassword

选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。

创建超级管理员账号

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小编。

关于阿里云 Kubernetes 服务上从零搭建 GitLab+Jenkins+GitOps 应用发布模型的实践全纪录的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)、15 分钟在阿里云 Kubernetes 服务上快速建立 Jenkins X Platform 并运用 GitOps 管理应用发布、15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布、centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)的相关信息,请在本站寻找。

本文标签: