LoginSignup
0
0

More than 3 years have passed since last update.

Verdaccio+Docker+EC2 その2-(a) BitBucket plugin

Posted at

今回仕事で任されたタスクをもう一度最初から作っていきます。

Project

同僚がFrontendチームで使うというVerdaccioを何の前知識もなくDockerizeして使えるようにしていく。元々同僚の頭の中では形があったようだが詳細は全く説明されず、最後あたりで説明された。。。

最終的に設定するもの
- docker-compose (Verdaccio, Verdaccio s3 plugin, https-portal)
- Bitbucket pipeline
- git hooks - post-receive

Usage
Verdaccioアクセスはhttps://<サイト>

A. Publish a package
1. チームの誰かがパッケージをパブリッシュする。
2. このパッケージはS3 bucketへ。
3. BitBucket Pipelineを通してプロダクションにデプロイ。

B. Add a new user
1. 新規ユーザーを追加>conf/htpasswdに追加される。
2. BitBucket Pipelineを通してプロダクションにデプロイ。


今回はその2aの設定

  • Verdaccio & Redis (Dockerfile, config.yaml)+BitBucket plugin
  • EC2 (docker, docker-compose, npm)

これはかなり長い時間をかけたけど結局できず、コメントを見る限り問題があるらしい。


Spec and Software

  • Amazon Ubuntu Server 18.04
  • Verdaccio
  • Docker

Path

home/ubuntu/verdaccio-bb/
├── Dockerfile
├── conf
│   └── config.yaml
├── docker-compose.yaml
├── package.json
├── plugins
└── storage

verdaccio/conf/config.yaml

storage: /verdaccio/storage
auth:
  bitbucket:
    allow: TeamOne(admin|contributor|member)
    ttl: 604800 # 7 days
    defaultMailDomain: aaa.com <- #有無でテストした
    hashPassword: true
    cache: redis
    redis:
        host: 'redis'
        port: 6379
        prefix: 'verdaccio-bitbucket:'
listen:
  0.0.0.0:4873
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
packages:
  '@mypackage/*':
    access: TeamOne
    publish: TeamOne # restrict to bitbucket teams
  '@*/*':
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
  '**':
    proxy: npmjs
logs:
  - {type: stdout, format: pretty, level: http}

verdaccio/package.json

適当に作る。
npm init
名前は上のポイントに合わせる
"name": "@mypackage/verdaccio",

docker-compose.yml

version: '3.1'

services:
  verdaccio:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: "verdaccio"
    networks:
      - node-network
    environment:
      - VERDACCIO_PORT=4873
    ports:
      - "4873:4873"
    volumes:
      - "/home/ubuntu/verdaccio-bb/storage:/verdaccio/storage"
      - "/home/ubuntu/verdaccio-bb/conf:/verdaccio/conf"
      - "/home/ubuntu/verdaccio-bb/plugins:/verdaccio/plugins"  
  redis:
    image: "redis"
    container_name: "redis"
    networks:
      - node-network
    ports:
      - "6379:6379"
    hostname: redis
networks:
  node-network:
    driver: bridge

Dockerfile

FROM verdaccio/verdaccio

USER root

ENV NODE_ENV=production

RUN apk add --no-cache --virtual .gyp \
        python \
        make \
        g++

RUN npm i && npm install verdaccio-bitbucket

USER verdaccio

References

Tips

1) Redis設定
2) conf/config.yaml allowでチーム設定

Error Messages

1) Error: Request failed with status code 401

Useful commands

docker-compose up --force-recreate
docker exec -it --user=root verdaccio /bin/sh

Testing

1. docker起動
docker-compose up
expected logging

verdaccio    |  warn --- config file  - /verdaccio/conf/config.yaml
verdaccio    |  warn --- Plugin successfully loaded: verdaccio-bitbucket
verdaccio    |  warn --- http address - http://0.0.0.0:4873/ - verdaccio/4.2.0

2. URLにアクセス

3. Login as a BitBucket user

logging

defaultMailDomain有り

A) "username"で試す。

 trace--- authenticating for user <username> failed. Error: bad username/password, access denied

B) "username@aaa.com" で試す。

 trace--- authenticating <email>@aaa.com
 debug--- [bitbucket] getting teams for <email>@aaa.com@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=member&pagelen=100, role: member
 debug--- [bitbucket] getting teams for <email>@aaa.com@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=contributor&pagelen=100, role: contributor
 debug--- [bitbucket] getting teams for <email>@aaa.com@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=admin&pagelen=100, role: admin
 warn --- undefined, user: <email>@aaa.com, Bitbucket API adaptor error: Request failed with status code 401
 trace--- authenticating for user <email>@aaa.com failed. Error: Request failed with status code 401

C) "username..aaa" 以下とあるので..で試す。
Since the username for Bitbucket is the email addresses and cannot contain @, replace the @ with two periods .. The email address is then parsed and converted to a normal email address for authentication

 trace--- authenticating for user <email>@aaa.com failed. Error: Request failed with status code 401
 http <-- 401, user: null(80.2.21.161), req: 'POST /-/verdaccio/login', error: Request failed with status code 401
 info <-- 80.2.21.161 requested 'POST /-/verdaccio/login'
 trace--- authenticating <email>..aaa.com
 debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=member&pagelen=100, role: member
 debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=contributor&pagelen=100, role: contributor
 debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=admin&pagelen=100, role: admin

 trace--- authenticating for user <email>..aaa.com failed. Error: bad username/password, access denied

defaultMailDomain無し

A) "username"で試す。

verdaccio    |  trace--- authenticating <username>
verdaccio    |  debug--- [bitbucket] getting teams for <username>, url: https://api.bitbucket.org/2.0/teams?role=member&pagelen=100, role: member
verdaccio    |  debug--- [bitbucket] getting teams for <username>, url: https://api.bitbucket.org/2.0/teams?role=contributor&pagelen=100, role: contributor
verdaccio    |  debug--- [bitbucket] getting teams for <username>, url: https://api.bitbucket.org/2.0/teams?role=admin&pagelen=100, role: admin

verdaccio    |  trace--- authenticating for user <username> failed. Error: bad username/password, access denied

B) "email..aaa.com"で試す。

verdaccio    |  trace--- authenticating <email>..aaa.com
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=member&pagelen=100, role: member
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=contributor&pagelen=100, role: contributor
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=admin&pagelen=100, role: admin

verdaccio    |  trace--- authenticating for user <email>..aaa.com failed. Error: bad username/password, access denied

C) "email@aaa.com"で試す。

verdaccio    |  trace--- authenticating <email>@aaa.com
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=member&pagelen=100, role: member
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=contributor&pagelen=100, role: contributor
verdaccio    |  debug--- [bitbucket] getting teams for <email>@aaa.com, url: https://api.bitbucket.org/2.0/teams?role=admin&pagelen=100, role: admin

verdaccio    |  trace--- authenticating for user <email>@aaa.com failed. Error: bad username/password, access denied

Issue 22

同じcurlをしてみる

curl -u user:password https://api.bitbucket.org/2.0/teams?role=member -v

エラーは出ない
* Connection #0 to host api.bitbucket.org left intact
{"pagelen": 10, "values": [], "page": 1, "size": 0}

これと同じcurlを使ってみる
https://github.com/idangozlan/verdaccio-bitbucket/blob/526ff1852a08727e9893d1e8c17c3762e2e4cb1f/src/bitbucket2.js#L40

エラーは出ない
{"pagelen": 10, "values": [], "page": 1, "size": 0}

結論

何日もかけたけどこれ以上時間を費やせないので途中断念。
使っている人がいたら教えてください。

その他読んだもの

app password
https://stackoverflow.com/questions/39886995/how-to-access-bitbucket-using-app-password

basic authentication deprecation
https://confluence.atlassian.com/cloud/deprecation-of-basic-authentication-with-passwords-for-jira-and-confluence-apis-972355348.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0